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 активных работников.