网上找了一圈基本上都提到一个重启作业器(work)的指令:php artisan queue:restart

learnku laravel 站点上 laravel 5.2 版对于队列开发、部署的考量项 里解释了为什么需要重启作业器:

在后台服务的队列侦听器中开发时所要考量的事项

在后台运行的队列侦听器在处理完每个任务前不会重新启动框架。因此你应该在任务运行完成前,谨慎地释放所有内存占用较高的资源。例如你利用 GD 函数库来处理图片,就要在结束前用 imagedestroy 来释放内存。

在后台任务侦听器进行布署

由于后台队列工作器是长驻进程,因此除非队列重新启动,否则任何代码上的任何修改都不会被应用。所以要布署一个有用到后台队列服务器的应用程序,最简单的方式就是在布署脚本文件中对作业器进行重启。你可以在布署命令中加入以下命令,来优雅地重启所有作业器:

php artisan queue:restart

这个命令会优雅地告知所有队列服务器,在它们处理完当前任务后重新启动,这样就不会有任务遗失的问题。

所以,在每次修改了 Job 任务本身或者 Job 引入的类代码之后都需要重新启动作业器。

文章目录