运行laravel队列:在共享主机上工作

时间:2017-09-10 14:12:36

标签: laravel laravel-queue

我想要我的laravel队列:努力继续在共享主机上运行,​​这是一个共享主机(我不在VPS上)我无法安装任何东西,因为我几乎所有的在线资源正在寻找这个建议安装主管。所以基本上我以为我可以创建一个cron作业来检查队列是否没有运行并启动它,任何关于如何解决这个问题的帮助因为有点卡住了,谢谢。

P.S。我在Linux服务器和Laravel 5.3上

7 个答案:

答案 0 :(得分:5)

如您所说,您使用的是共享托管,请按照以下步骤操作。

第1步。 您需要将队列驱动程序设置为database

第2步  您需要使用以下命令设置cron作业 php /path/to/application/artisan queue:work --queue=high,default

你可以尝试一下。我希望它能奏效。

答案 1 :(得分:0)

我认为要完成这个

在档案Illuminate\Queue\Worker.php上,我当前的laravel版本(5.3)位于第151行;在功能runNextJob($connectionName, $queue, WorkerOptions $options)上添加else,如下所示

if ($job) {
    return $this->process(
        $connectionName, $job, $options
    );
 } else {
    $this->stop();
}

现在创建一个cron作业,当队列耗尽时,它将使用命令php artisan queue:work运行你喜欢的次数,它将退出(但应该在进程存在时频繁出现)

更新:使用withoutOverlapping()任务计划可以防止进一步调用该命令(如果已经运行),所以这是一个更好的选择,因为前一个是每次必须进行的更改您composer installcomposer update

答案 2 :(得分:0)

这是搜索了几天后对我有用的解决方案。

flock -n /tmp/latavel_queues.lockfile /usr/bin/php /path/to/laravel/artisan queue:listen

请参阅https://laracasts.com/discuss/channels/servers/database-queue-on-shared-hosting

答案 3 :(得分:0)

另一个解决方案(我以这种方式解决了同样的问题)。您可以这样编写脚本:

# getting running processes with name "queue:work"
QUEUE_STATUS=$(ps aux | grep "queue:work")

# check is queue:work started, if no, start it
if $( echo $QUEUE_STATUS | grep --quiet 'artisan queue:work')
then
    exit;
else
    php ~/public_html/artisan queue:work
fi

并在CRON中运行它。我每10分钟跑一次。

答案 4 :(得分:0)

最好的方法是在面板的任务上设置Followin命令(我使用plesk控制面板,这使我能够在其中设置任务)

php artisan queue:work --once

注意: ,在我的共享主机中,由于其服务器配置,我必须设置以下值:

  1. php: /opt/plesk/php/7.2/bin/php -q
  2. 工匠:/var/www/vhosts/t4f.ir/httpdocs/artisan
  3. 我的命令:然后我应该编写命令

因此,结果将是这样的:

/opt/plesk/php/7.2/bin/php -q /var/www/vhosts/t4f.ir/httpdocs/artisan queue:work --once

还有一个用于运行时的选项,我将其设置为Cron类型,其值为: * * * * * ,这意味着将每分钟执行一次此代码。就像我曾经使用过的一样,在结束时,一旦它执行了命令并且完成了作业,它将被终止。 关于并发执行,我不担心因为它在排队系统中处理以及它对系统的责任。

答案 5 :(得分:0)

尝试添加两个cron作业:

  1. 要清除缓存:
/usr/local/bin/php /home/<path-to-project>/artisan cache:clear
  1. 运行调度程序
/usr/local/bin/php /home/<path-to-project>/artisan schedule:run

此外,请确保您的app \ Console \ Kernel.php具有类似的内容

protected function schedule(Schedule $schedule)
    {
        $schedule->command('queue:work --tries=3')
            ->cron('* * * * *')
            ->withoutOverlapping(5);
    }

如果队列开始工作,则删除第一个作业(删除缓存的作业)

答案 6 :(得分:0)

在 Laravel 8 中,您可以为 [[0.14189306309813854, 0.16354616375767916]] [[0.14189306309813854, 0.16354616375767916], [0.6569125084666053, 0.297727414477004]] [[0.14189306309813854, 0.16354616375767916], [0.6569125084666053, 0.297727414477004], [0.0970596850634321, 0.0031047000241498646]] 选择 --max-time,允许它在一段时间后停止作业处理。

queue:work

例如,您可以将 cron 作业设置为 5 分钟来运行作业处理并将 php artisan queue:work --max-time=300 选项设置为 5 分钟(300 秒)。在这种情况下,cron 将运行作业处理,300 秒后 --max-time 将退出,几秒钟后,cron 将再次运行作业处理,依此类推。