supervisord进程不重新加载新的php代码
对于同步处理,我们将supervisord与beanstalkd队列一起使用。应用程序和工作程序代码都是用php编写的(使用)。我注意到,当我们部署新代码时,新代码不适用于工作进程。我不太清楚原因是什么,但我发现:supervisord进程不重新加载新的php代码,php,supervisord,Php,Supervisord,对于同步处理,我们将supervisord与beanstalkd队列一起使用。应用程序和工作程序代码都是用php编写的(使用)。我注意到,当我们部署新代码时,新代码不适用于工作进程。我不太清楚原因是什么,但我发现: service supervisor restart不会重新启动进程(PID保持不变) supervisorctl reload会重新加载所有进程,现在使用新代码 supervisorctl无法(据我所知)只重新加载一个程序,而保持其他程序仍在运行 我正在寻找一种方法来部署新代码(通
service supervisor restart
不会重新启动进程(PID保持不变)supervisorctl reload
会重新加载所有进程,现在使用新代码supervisorctl
无法(据我所知)只重新加载一个程序,而保持其他程序仍在运行是否有任何方法可以优雅地重新加载进程,而不是完全重新加载所有supervisord子进程?或者,如果原因可能是操作码缓存,是否可以使用某个触发器刷新缓存?您可以使用supervisorctl仅重新启动一个进程
supervisorctl -c /etc/supervisord/supervisord.conf
进入supervisor子shell后,可以使用状态
和重新启动
重新加载作业。
考虑下面的例子,我重新装入花卉
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
即可退出SupervisorShell。
如果检查状态输出,您将看到作业的pid已更改,正常运行时间计数已重新启动。Supervisord 3.0附带的supervisorctl允许将单个程序(或程序组)作为单个非交互式命令重新启动
# supervisorctl help restart
restart <name> Restart a process
restart <gname>:* Restart all processes in a group
restart <name> <name> Restart multiple processes or groups
restart all Restart all processes
Note: restart does not reread config files. For that, see reread and update.
然后通过Web服务器调用它,例如通过curlhttps://example.com/flush_cache.php
。通过Web服务器执行opcache\u reset()
调用以刷新正确的缓存非常重要。通过PHPCLI命令调用它将不起作用
根据您运行PHP的方式,还有其他一些方法可以刷新它。对于使用mod_php的Apache,您可以通过
apachectl
(或类似工具)重新加载Apache。对于PHP-FPM,您可以通过服务PHP FPM reload
(或类似服务)重新加载FPM进程。另一个选项是使用,它允许在不重新启动进程的情况下从cli刷新,还提供了获取统计信息的命令。因此您必须手动输入supervisor interactive subshell。我打赌OP想要自动化它,因此交互并不是他真正需要的。
<?php
opcache_reset();