我在保持队列时遇到问题:在我的服务器上运行工作命令。我尝试了nohup,但是一旦我关闭终端(无论我尝试了什么,每隔5分钟左右就会超时),这个过程就会消失。
我考虑过在cron中运行一个脚本来启动nohup命令,但是这也是jailhell中运行的,所以我无法看到该进程是否仍在运行以前的cron,我不知道想要一个潜在的20k的这种运行副本,因为它试图每分钟开始。
我也无权安装安装Supervisord的软件。
那么,我可以使用哪些其他解决方案来确保它继续运行?
编辑我联系了我的主持人的支持,而且看起来我没有真正的替代方案。我想我将不得不在Linode上设置这个项目,或者做一些没有排队任务的事情。
答案 0 :(得分:0)
问题似乎出在shell配置上,因为命令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();
此代码可确保至少有一个工作人员始终在运行,并且如果活动的工作人员超过5个,则同时强制执行restart
。