Laravel Forge:如何阻止排队工作人员?



我在 Forge 上配置了一个队列工作线程作为守护进程,然后使用了推荐的部署脚本命令 (php artisan queue:restart(。

如何手动停止和重新启动队列工作线程? 如果我停止它,主管将重新启动它。 我需要先杀死锻造厂中的活跃工人吗?

这可能是临时需要的。 例如,如果我想清除队列已打开的日志文件。

我在部署讨论中一直很直言不讳,我总是告诉人们使用 supervisorctl 命令停止他们的工作进程。

supervisorctl stop <name of task>

使用queue:restart命令实际上不会重新启动任何内容。它在缓存中设置一个条目,工作进程检查并关闭该条目。正如您所注意到的,主管将重新启动该过程。

这意味着queue:restart有一个巨大的问题,忽略了命名和它不重新启动的事实;这将导致使用相同缓存的所有服务器上的所有工作进程重新启动。我认为这是错误的,我认为部署应该只影响当前正在部署到的当前服务器。

如果您使用的是每服务器缓存(如file缓存驱动程序(,则这有另一个问题;如果您的部署完全删除网站文件夹,会发生什么情况?缓存将更改,队列将重新启动,并且工作进程可能混合了新旧代码。有趣的事情要调试...

主管会在进程关闭时发出信号,等待它干净地关闭,如果没有,则强制终止它。可以在管理引擎配置文件中配置这些超时。这意味着使用 supervisorctl 停止队列进程不会在"中途"终止任何作业,它们将全部完成(假设它们运行的时间足够短,或者您增加了超时(。

最新更新