主pipe和docker工人:如果服务不启动,如何退出主pipe?
我目前正在使用我的Docker镜像中的Supervisor来启动和pipe理我的服务,我想configurationSupervisor退出,如果这些服务中至less有一个进入了FATAL状态。
这样做,当Supervisor成功启动时,我想避免让Docker容器处于运行状态。
谢谢!
您可以使用Supervisor 事件侦听器来执行此操作。 订阅它到事件PROCESS_STATE_FATAL
,并通过发送一个SIGTERM到supervisord来响应这个事件,你很可能在容器中作为PID 1运行。
正如mhsmith提到的,一个事件监听器是实现这个目标的最好方法。 你可以使用下面的监听器(比如/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()
然后,向主pipe注册:
[eventlistener:exit_on_any_fatal] command=exit-event-listener events=PROCESS_STATE_FATAL