From 5b18b90c22428071227454d0d6b6271b66da3361 Mon Sep 17 00:00:00 2001 From: David Beniamine <david.beniamine@tetras-libre.fr> Date: Tue, 23 Aug 2022 16:24:59 +0200 Subject: [PATCH] Stop properly sympa container on program failure --- docker/sympa/Dockerfile | 4 ++++ docker/sympa/exit-event-listener.py | 19 +++++++++++++++++++ docker/sympa/supervisord.conf | 4 ++++ 3 files changed, 27 insertions(+) create mode 100644 docker/sympa/exit-event-listener.py diff --git a/docker/sympa/Dockerfile b/docker/sympa/Dockerfile index d379f75..7b38405 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 0000000..b91e7a5 --- /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 1118963..7eb5603 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 -- GitLab