Supervisor & Docker: How to exit Supervisor if a service doesn't start?

浪尽此生 提交于 2019-12-04 11:20:41

You can do this with a Supervisor event listener. Subscribe it to the event PROCESS_STATE_FATAL, and respond to the event by sending a SIGTERM to supervisord, which you are presumably running as PID 1 within the container.

Thomas Orozco

As mhsmith mentioned, an event listener is the best way to achieve this. You could use the following listener (ADD this as e.g. /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()

And then, register it with supervisor:

[eventlistener:exit_on_any_fatal]
command=exit-event-listener
events=PROCESS_STATE_FATAL
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!