Laravel队列只运行一个作业

dun*_*oan 3 php database queue laravel

在我的表中"jobs"有5个工作,我在localhost上使用了"php artisan queue:listen"进程,然后它运行了所有的工作并完成了.但是当我在服务器上使用这个过程时,它只运行一次作业(同样是"php artisan queue:work").我用queue_driver是"数据库".

iga*_*ter 13

更新 - Laravel 5.5+

只需使用:

php artisan queue:work --once


haa*_*kym 7

TL; DR

php artisan queue:work =运行一个排队的工作并停止

php artisan queue:listen =运行所有排队的作业并监听更多直到停止

更多细节:

你是如何运行命令的?你只是打开一个终端并运行它,或者你有一个cron作业,每隔一段时间运行一次?

如果您只是打开终端并且正在运行php artisan queue:work将在队列上完成一项任务然后停止,而如果您运行php artisan queue:listen它将处理队列中的所有作业并继续侦听任何进一步的作业,直到它停止.

进一步阅读有关queue:work以下内容的文档:

启动队列侦听器

Laravel包含一个Artisan命令,当它们被推入队列时将运行新的作业.您可以使用queue:listen命令运行侦听器:

php artisan queue:listen

处理队列中的第一个作业

要仅处理队列中的第一个作业,可以使用queue:work命令:

php artisan queue:work

你应该做什么?

我猜你最好要做到你的服务器设置一个cron作业的时间间隔连续运行,并让它运行queue:work.更好的是,熟悉文档并在此之后做出决定.

看到这里回答的类似问题:queue:work --daemon和queue:listen之间有什么区别