diff --git a/docker/sympa/Dockerfile b/docker/sympa/Dockerfile index d379f756451623961b615e3c5235c73cbac58e5b..7b38405ddad384b745d69d2c43a349c930291da1 100644 --- a/docker/sympa/Dockerfile +++ b/docker/sympa/Dockerfile @@ -49,4 +49,8 @@ ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 +COPY exit-event-listener.py /usr/local/bin + +RUN chmod +x /usr/local/bin/exit-event-listener.py + ENTRYPOINT /entrypoint diff --git a/docker/sympa/exit-event-listener.py b/docker/sympa/exit-event-listener.py new file mode 100644 index 0000000000000000000000000000000000000000..b91e7a5c575bbb5ce174e7a1ab134a42177ad04f --- /dev/null +++ b/docker/sympa/exit-event-listener.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 +# From https://stackoverflow.com/a/37527488 +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() diff --git a/docker/sympa/supervisord.conf b/docker/sympa/supervisord.conf index 1118963c34d19f3b217c0d6d9f6e099ad78c1cd2..7eb5603ab4c67e5d0b4ad024e31d526b88e2f526 100644 --- a/docker/sympa/supervisord.conf +++ b/docker/sympa/supervisord.conf @@ -126,3 +126,7 @@ stdout_logfile_maxbytes=0 stderr_logfile_maxbytes=0 stdout_logfile=/dev/stdout stderr_logfile=/dev/stderr + +[eventlistener:exit_on_any_fatal] +events=PROCESS_STATE_FATAL +command=exit-event-listener.py