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

标签 php supervisord

对于同步处理,我们使用带有 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/

相关文章:

Dockerfile supervisord 找不到路径

php - 为什么 AJAX 响应返回未定义?

php - 获取关联数组时如何删除 fatal error

php按创建日期而不是名称对文件夹进行排序

php - SQL 字符串替换为 ID 语句

python - 停止主管不会停止 celery worker

node.js - 出现错误 ‘node’ : No such file or directory while setting up laravel-echo-server with supervisor

python - 作为非根用户的主管

supervisord - 使用主管运行 flask 应用程序

php - 使用 laravel 5 将大型结果集存储在缓存/redis 中