1

我在保持 queue:work 命令在我的服务器上运行时遇到问题。我尝试了 nohup,但是一旦我关闭终端(无论我尝试了什么,它每 5 分钟左右超时一次),这个过程就会消失。

我想过在 cron 中运行一个脚本来启动 nohup 命令,但是它也在 jailshell 中运行,所以我无法查看该进程是否仍在从以前​​的 cron 运行,我不想要潜在的 20k 副本之所以这样运行,是因为它每分钟都在尝试启动。

我也无权安装软件来安装 Supervisord。

那么,我可以使用哪些其他解决方案来确保它保持运行?

编辑我联系了我的主机的支持人员,看起来我没有真正的选择。我想我将不得不在 Linode 上设置这个项目,或者重新做一些事情来避免排队任务。

4

1 回答 1

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();

此代码确保至少有一个工作人员始终在运行,同时restart如果您有超过 5 个工作人员处于活动状态,则强制执行。

于 2019-04-08T14:41:34.287 回答