laravel - Laravel 5.3 队列工作者,通过 Jenkins 一段时间后停止
问题描述
在 Laravel 5.3 中。
我正在通过 jenkin 运行 laravel 的命令:
php artisan queue:work
但我需要阻止它。理想情况下,我想在队列作业变空后停止工作人员,但在 Laravel 5.3 上这是不可能的。所以另一种选择是在一段时间后停止命令,比如说 1 分钟。
一段时间后如何停止通过詹金斯运行的进程?或停止 php artisan 命令。
有了php artisan queue:restart
我可以停止所有工作,所以我尝试了:
php artisan queue:work
sleep 60; php artisan queue:restart
但是第二条线永远不会到达,因为工人仍在运行。
任何提示?
解决方案
你可以使用一些解决方案来解决它
1.
- 通过避免在每个作业中启动整个应用程序,您可以节省服务器资源。
- 您必须手动重新启动工作程序以反映您在应用程序中所做的任何代码更改。
您还可以运行:
php artisan queue:work --once
2- 这将启动应用程序的一个实例,处理单个作业,然后终止脚本。
php artisan queue:listen
queue:listen 命令只是在无限循环中运行 queue:work --once 命令,这将导致以下结果:
- 每个循环都会启动一个应用程序实例。
- 分配的工人将选择一个工作并执行它。
- 工作进程将被杀死。
Usingqueue:listen
可确保为每个作业创建一个新的应用程序实例,这意味着您不必手动重新启动工作程序以防您对代码进行更改,但这也意味着将消耗更多的服务器资源。