保持laravel队列:在jailshell中运行

时间:2017-09-23 18:59:40

标签: laravel cron jail-shell

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

我考虑过在cron中运行一个脚本来启动nohup命令,但是这也是jailhell中运行的,所以我无法看到该进程是否仍在运行以前的cron,我不知道想要一个潜在的20k的这种运行副本,因为它试图每分钟开始。

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

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

编辑我联系了我的主持人的支持,而且看起来我没有真正的替代方案。我想我将不得不在Linode上设置这个项目,或者做一些没有排队任务的事情。

1 个答案:

答案 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