【发布时间】:2015-07-15 15:11:30
【问题描述】:
为了处理大量作业,我根据要完成的工作量运行可变数量的队列工作人员。我不希望在我们认为合适的时间内完成需要完成的工作所需的员工数量。
目前,出于测试目的,我启动了 5 个守护进程队列工作人员,但在生产中,这个数量可能在 25 到 100 个工作人员之间,甚至可能更多。我知道在部署时,我必须先使用php artisan down 将框架置于维护模式来停止队列工作人员,因为--daemon 标志会导致框架仅在工作人员启动时加载,因此新代码不会在部署期间生效,直到 worker 重新启动。
如果我出于某种原因需要停止工作人员,我可以使用 php artisan down 将应用程序置于维护模式,这将导致工作人员在完成当前工作(如果他们正在工作)后死亡。但是,有时我想杀死工作人员而不将整个应用程序置于维护模式。
是否有一种安全的方法可以阻止工作人员继续处理当前工作,然后在不将整个应用程序置于维护模式的情况下死亡?
基本上我需要的是一个php artisan queue:stop,它的行为类似于php artisan queue:restart,但是一旦工作完成就不会重新启动worker。
我期待有一个类似php artisan queue:stop 的命令可以执行此操作,但事实并非如此。
使用ps aux | grep php,我可以获取工作人员的进程ID,并且我可以通过这种方式终止进程,但我不想在工作过程中终止进程。
谢谢。
【问题讨论】:
-
对于任何发现此问题的人。 stackoverflow.com/questions/30060526/… 有答案。 php artisan queue:restart 将停止工作人员。 “重启”名称具有误导性。工人停止后实际上不会重新启动。
-
是正确的。 “重新启动”只有在您有像 Supervisor setup 这样的东西来监控并在它们退出后自动重新启动它们时才会发生。 (这是典型的设置。)
标签: php laravel queue daemon laravel-artisan