gpt4 book ai didi

php - supervisord 进程不会重新加载新的 php 代码

转载 作者:搜寻专家 更新时间:2023-10-31 22:03:21 24 4
gpt4 key购买 nike

对于同步处理,我们使用带有 beanstalkd 队列的 supervisord。应用程序和工作人员代码全部用 php 编写(使用 SlmQueue )。我注意到当我们部署新代码时,新代码不适用于工作进程。我不太确定是什么原因,但我确实发现了:

  1. service supervisor restart 不重启进程(PID保持不变)
  2. supervisorctl reload 重新加载所有进程,现在使用新代码
  3. supervisorctl 没有办法(据我所知)只重新加载一个程序并保持其他程序继续运行

我正在寻找一种部署新代码的方法(通过 ansible 和 git checkout 工作)并且不需要重新启动整个主管进程及其所有子进程。我们使用 PHP 5.5 运行 Ubuntu 12.04 机器。我想操作码缓存可能发挥了作用,但我不确定如何为这些特定文件触发刷新。

有没有办法优雅地重新加载进程而不是完全重新加载所有 supervisord 子进程?或者如果原因可能是操作码缓存,是否可以使用某个触发器刷新缓存?

最佳答案

您可以使用 supervisorctl 只重启一个进程。

supervisorctl -c /etc/supervisord/supervisord.conf

进入主 pipe shell 后,您可以使用 statusrestart 重新加载您的作业。考虑以下我重新加载花的示例

supervisor> status
beat_worker:beat_worker_00 RUNNING pid 32274, uptime 0:27:45
flower RUNNING pid 32275, uptime 0:27:45
workers:worker_wkrone_00 RUNNING pid 32278, uptime 0:27:45
workers:worker_wkrtwo_00 RUNNING pid 32276, uptime 0:27:45
workers:worker_wkrthree_00 RUNNING pid 32277, uptime 0:27:45

supervisor> restart flower
flower: stopped
flower: started

现在,如果您再次执行状态,您将看到 flower 的 pid 已更改。

supervisor> status
beat_worker:beat_worker_00 RUNNING pid 32274, uptime 0:28:13
flower RUNNING pid 32713, uptime 0:00:08
workers:worker_wkrone_00 RUNNING pid 32278, uptime 0:28:13
workers:worker_wkrtwo_00 RUNNING pid 32276, uptime 0:28:13
workers:worker_wkrthree_00 RUNNING pid 32277, uptime 0:28:13

然后只需执行 ctrl -d 即可退出 supervisord shell。如果您检查 status 的输出,您会看到作业的 pid 已更改并且正常运行时间计数已重新启动。

关于php - supervisord 进程不会重新加载新的 php 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23479986/

24 4 0
文章推荐: php - 测试日期是否在单个查询中重叠
文章推荐: javascript - 使用无序列表扩展 DIV
文章推荐: javascript - 如何在 标签内显示数组值?