【发布时间】:2012-07-10 21:43:55
【问题描述】:
我正在使用 Supervisor 来管理我在 EC2 实例上的 node.js 应用程序,并使用 git 进行部署。 Supervisor 在确保我的应用程序保持正常运行方面做得很好,但是每当我将新的服务器端代码推送到我的远程服务器时,它往往无法识别这些更改。我需要杀死主管进程并重新启动它。是我做错了什么,还是这是标准行为?
【问题讨论】:
我正在使用 Supervisor 来管理我在 EC2 实例上的 node.js 应用程序,并使用 git 进行部署。 Supervisor 在确保我的应用程序保持正常运行方面做得很好,但是每当我将新的服务器端代码推送到我的远程服务器时,它往往无法识别这些更改。我需要杀死主管进程并重新启动它。是我做错了什么,还是这是标准行为?
【问题讨论】:
这是标准行为; supervisord 不检测代码的变化。只有当进程本身停止或死亡时,它才会重新启动进程。
只要您推送更改,只需指示 supervisord 重新启动应用程序即可。 supervisorctl restart programname 就可以了,不用自己 kill 重启 supervisord。
如果 supervisord 配置发生变化,请使用supervisorctl update。
【讨论】:
supervisorctl 住在哪里?我需要为它设置任何配置吗?
supervisord相同的地方;见supervisord.org/introduction.html#supervisor-components
supervisorctl update 时出现错误:error: <class 'socket.error'>, [Errno 111] Connection refused: file: /usr/lib64/python2.6/socket.py line: 567
supervisorctl 使用与守护进程相同的配置来确定如何与它对话,但如果守护进程没有运行,那么联系它将失败,或这意味着 supervisorctl 没有使用相同的配置,但在错误的地方寻找。