在我的表"jobs"有5个作业,我在localhost上使用了进程"php-artisan queue:listen",然后它运行了所有作业并完成了。但当我在服务器上使用这个过程时,它只运行了一次作业(相同的"php-artisan队列:工作")。我使用queue_driver是"数据库"。
更新-Laravel 5.5+
只需使用:
php artisan queue:work --once
TL;DR
php artisan queue:work
=运行一个排队作业并停止
php artisan queue:listen
=运行所有排队作业并侦听更多作业,直到停止
更多详细信息:
你是如何运行命令的?你只是打开一个终端并运行它,还是有一个cron作业要每隔一段时间运行?
如果您只是打开一个终端,运行php artisan queue:work
将完成队列中的一项任务,然后停止,而如果您运行php artisan queue:listen
,它将处理队列中的所有作业,并继续侦听任何其他作业,直到停止。
进一步阅读有关queue:work
:的文档
启动队列侦听器
Laravel包括一个Artisan命令,该命令将按原样运行新作业被推到队列中。您可以使用以下队列运行侦听器:listen命令:
php artisan queue:listen
处理队列中的第一个作业
要只处理队列上的第一个作业,可以使用queue:work命令:
php artisan queue:work
你应该做什么
我猜您理想情况下想在服务器上做的是设置一个cron作业,使其每隔一段时间连续运行,并让它运行queue:work
。更好的做法是,熟悉文档,然后再做决定。
请参阅此处回答的类似问题:queue:work-daemon和queue:listen