我想要我的laravel队列:努力继续在共享主机上运行,这是一个共享主机(我不在VPS上)我无法安装任何东西,因为我几乎所有的在线资源正在寻找这个建议安装主管。所以基本上我以为我可以创建一个cron作业来检查队列是否没有运行并启动它,任何关于如何解决这个问题的帮助因为有点卡住了,谢谢。
P.S。我在Linux服务器和Laravel 5.3上
答案 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 install
或composer 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
注意: ,在我的共享主机中,由于其服务器配置,我必须设置以下值:
因此,结果将是这样的:
/opt/plesk/php/7.2/bin/php -q /var/www/vhosts/t4f.ir/httpdocs/artisan queue:work --once
还有一个用于运行时的选项,我将其设置为Cron类型,其值为: * * * * * ,这意味着将每分钟执行一次此代码。就像我曾经使用过的一样,在结束时,一旦它执行了命令并且完成了作业,它将被终止。 关于并发执行,我不担心因为它在排队系统中处理以及它对系统的责任。
答案 5 :(得分:0)
尝试添加两个cron作业:
/usr/local/bin/php /home/<path-to-project>/artisan cache:clear
/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 将再次运行作业处理,依此类推。