Supervisor & Docker: 如果服务没有启动,如何退出 Supervisor?
Supervisor & Docker: How to exit Supervisor if a service doesn't start?
我目前在我的 Docker 图像中使用 Supervisor 来启动和管理我的服务,我想将 Supervisor 配置为在这些服务中至少有一个进入 FATAL 状态时退出。
这样做,我想避免 Docker 容器处于 运行 状态,而只有 Supervisor 成功启动。
你可以和主管一起做这件事 event listener。将其订阅到事件 PROCESS_STATE_FATAL
,并通过向 supervisord 发送 SIGTERM 来响应该事件,您可能 运行 作为容器中的 PID 1。
正如 mhsmith 提到的,事件侦听器是实现此目的的最佳方式。您可以使用以下侦听器(ADD
例如 /usr/local/bin/exit-event-listener
):
#!/usr/bin/env python
import os
import signal
from supervisor import childutils
def main():
while True:
headers, payload = childutils.listener.wait()
childutils.listener.ok()
if headers['eventname'] != 'PROCESS_STATE_FATAL':
continue
os.kill(os.getppid(), signal.SIGTERM)
if __name__ == "__main__":
main()
然后,向主管注册:
[eventlistener:exit_on_any_fatal]
command=exit-event-listener
events=PROCESS_STATE_FATAL
我目前在我的 Docker 图像中使用 Supervisor 来启动和管理我的服务,我想将 Supervisor 配置为在这些服务中至少有一个进入 FATAL 状态时退出。
这样做,我想避免 Docker 容器处于 运行 状态,而只有 Supervisor 成功启动。
你可以和主管一起做这件事 event listener。将其订阅到事件 PROCESS_STATE_FATAL
,并通过向 supervisord 发送 SIGTERM 来响应该事件,您可能 运行 作为容器中的 PID 1。
正如 mhsmith 提到的,事件侦听器是实现此目的的最佳方式。您可以使用以下侦听器(ADD
例如 /usr/local/bin/exit-event-listener
):
#!/usr/bin/env python
import os
import signal
from supervisor import childutils
def main():
while True:
headers, payload = childutils.listener.wait()
childutils.listener.ok()
if headers['eventname'] != 'PROCESS_STATE_FATAL':
continue
os.kill(os.getppid(), signal.SIGTERM)
if __name__ == "__main__":
main()
然后,向主管注册:
[eventlistener:exit_on_any_fatal]
command=exit-event-listener
events=PROCESS_STATE_FATAL