Keep laravel queue: работа выполняется в тюрьме

У меня проблемы с сохранением команды queue:work на моем сервере. Я попытался nohup, но как только я закрываю терминал (время ожидания каждые 5 минут или около того, что бы я ни пытался), процесс уходит.

Я думал о запуске сценария в cron для запуска команды nohup, однако он также запускается в jailshell, поэтому у меня нет возможности увидеть, выполняется ли процесс с предыдущего cron или нет, и я не хочу потенциальных копий по 20 тыс. этого бега, потому что он пытается начать каждую минуту.

У меня также нет доступа к установке программного обеспечения для установки Supervisord.

Итак, какие еще решения я могу использовать, чтобы обеспечить их работоспособность?

РЕДАКТИРОВАТЬ Я связался со службой поддержки моего хоста, и, похоже, у меня нет реальных альтернатив. Я думаю, что мне придется настроить этот проект на Linode, или переделать вещи, чтобы не было задач в очереди.

0 ответов

Кажется, что проблема заключается в конфигурации оболочки, потому что команда ps переписан, чтобы показать только процесс детей.

Решение состоит в том, чтобы попросить вашего хостинг-провайдера (или изменить его самостоятельно, если это разрешено) установить эту переменную:

SHELL="/bin/bash"

Это простое исправление позволило мне работать правильно.

Теперь мой Kernel.php выглядит следующим образом:

$command = "ps faux | grep queue:work";

exec($command, $task_list);
// Process are duplicate in ps and show also the command as two single lines
$running_process = (count($task_list) / 2) - 1;

if($running_process < 1)
    $schedule->command('queue:work --queue=high,low --tries=3')
        ->everyMinute();
else if($running_process > 5)
    // If too many are active, restart everything to avoid overload
    $schedule->call(function(){
        Artisan::call('queue:restart');
    })->everyMinute();

Этот код гарантирует, что по крайней мере один работник всегда работает, и в то же время вызывает restart если у вас более 5 активных работников.

Другие вопросы по тегам