- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
对于同步处理,我们使用带有 beanstalkd 队列的 supervisord。应用程序和工作人员代码全部用 php 编写(使用 SlmQueue )。我注意到当我们部署新代码时,新代码不适用于工作进程。我不太确定是什么原因,但我确实发现了:
service supervisor restart
不重启进程(PID保持不变)supervisorctl reload
重新加载所有进程,现在使用新代码supervisorctl
没有办法(据我所知)只重新加载一个程序并保持其他程序继续运行我正在寻找一种部署新代码的方法(通过 ansible 和 git checkout 工作)并且不需要重新启动整个主管进程及其所有子进程。我们使用 PHP 5.5 运行 Ubuntu 12.04 机器。我想操作码缓存可能发挥了作用,但我不确定如何为这些特定文件触发刷新。
有没有办法优雅地重新加载进程而不是完全重新加载所有 supervisord 子进程?或者如果原因可能是操作码缓存,是否可以使用某个触发器刷新缓存?
最佳答案
您可以使用 supervisorctl 只重启一个进程。
supervisorctl -c /etc/supervisord/supervisord.conf
进入主 pipe shell 后,您可以使用 status
和 restart
重新加载您的作业。考虑以下我重新加载花的示例
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/
我是一名优秀的程序员,十分优秀!