为了处理大量的作业,我根据完成的工作量来运行可变数量的队列工作器。我不想让更多的工作人员完成需要在我们认为合适的时间段内完成的工作。Laravel Artisan CLI安全地停止守护进程队列工作人员
目前,我为测试目的启动了5个守护进程队列工作者,但是在生产中,这个数字可能在100个工人之间,可能更多。我知道在部署时,我必须首先通过使用php artisan down
将框架置于维护模式来停止队列工作人员,因为标志会导致框架仅在工作人员启动时加载,因此新代码在部署直到工人重新启动。
如果由于某种原因需要停止工作,我可以使用php artisan down
将应用程序置于维护模式,这将导致工作人员在完成当前工作(如果他们正在工作)完成后死亡。但是,有些时候我想杀死工作人员而没有将整个应用程序置于维护模式。
有没有一种安全的方式来阻止工作人员继续处理他们当前的工作,然后死亡,而无需将整个应用程序置于维护模式?
基本上我需要的是一个php artisan queue:stop
,其行为类似于php artisan queue:restart
,但一旦任务完成不重新启动工人。
我期待有一个像php artisan queue:stop
命令那样做,但似乎并非如此。
使用ps aux | grep php
我能够获取工作人员的进程ID,并且我可以用这种方式杀死进程,但我不希望在进行工作时杀死进程。
谢谢。
对于任何发现此问题的人。 http://stackoverflow.com/questions/30060526/laravel-artisan-cli-safely-stop-daemon-queue-workers#comment48332831_30087630有答案。 PHP的工匠队列:重启将停止工人。 “重新启动”的名称是误导性的。工人停止后实际上不会重新启动。 – Vigs
是正确的。“重新启动”只有当你有类似Supervisor设置才能监控并在他们退出时自动重启它们时才会发生。 (这是典型的设置。) –