【问题标题】:Laravel 5.6. Stop a worker AFTER job execution with supervisor拉拉维尔 5.6。使用主管执行作业后停止工作人员
【发布时间】:2019-03-08 23:12:51
【问题描述】:

是否可以向工作人员发送停止信号,使其仅在处理作业后停止。

目前我有一份工作,需要一些时间并且不能被打断,因为我只有一次尝试/尝试。

有时我需要阻止工作人员重新部署我的代码。有没有办法在完成当前工作并开始新工作之前停止 Laravel 的工作人员?

我正在使用supervisor 重新启动队列工作人员。

因为目前在每次部署时,我都会失去 1 份工作,而我的客户也会赔钱 :(

附言

这不是 Laravel Artisan CLI safely stop daemon queue workers 的副本,因为他使用的是 Artisan CLI,而我使用的是 supervisor

【问题讨论】:

  • 你可以放下应用然后部署吗?
  • 不幸的是,我不能,因为我想尽可能频繁地部署,而且我有很多人使用 UI。 @ka_lin
  • 取决于您的部署策略,您可以(在部署时)创建一个目录(与您的应用程序处于同一级别)运行部署并创建一个符号链接以指向当前版本(尽管工匠下来并在需要切换以确保数据完整性时向上)
  • @ka_lin 不在 docker 中 :( Deployer 不支持 docker。然而。

标签: php laravel laravel-5 supervisord laravel-queue


【解决方案1】:

有一个内置功能:

php artisan queue:restart

此命令将指示所有队列工作人员在处理完当前作业后优雅地“死亡”,以免丢失现有作业。由于队列工作人员会在执行 queue:restart 命令时死掉,因此您应该运行进程管理器(例如 Supervisor)来自动重新启动队列工作人员。

【讨论】:

    【解决方案2】:

    Supervisord 有一个XML-RPC Api,您可以从您的 php 代码中使用它。我建议你使用Zend's XML-RPC Client

    【讨论】:

      【解决方案3】:

      autorestart=true in supervisor + php artisan queue:restart 解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-30
        • 1970-01-01
        • 2014-08-31
        • 2017-12-05
        • 2020-12-10
        相关资源
        最近更新 更多