From 58f80232c65a961c935f85417a92c2df310a5f34 Mon Sep 17 00:00:00 2001 From: Randy Fay Date: Tue, 9 Oct 2018 09:38:27 -0600 Subject: [PATCH] Make supervisord exit when key processes die, fixes #1137 (#1142) --- .../files/etc/supervisor/apache.conf | 1 - .../etc/supervisor/conf.d/supervisor.conf | 5 ++++ .../files/usr/local/bin/kill_supervisor.py | 28 +++++++++++++++++++ pkg/version/version.go | 2 +- 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100755 containers/ddev-webserver/files/usr/local/bin/kill_supervisor.py diff --git a/containers/ddev-webserver/files/etc/supervisor/apache.conf b/containers/ddev-webserver/files/etc/supervisor/apache.conf index 364597a10a8..db3a18a0550 100644 --- a/containers/ddev-webserver/files/etc/supervisor/apache.conf +++ b/containers/ddev-webserver/files/etc/supervisor/apache.conf @@ -1,5 +1,4 @@ [program:apache2] -; startsecs = 1 stopwaitsecs = 20 startretries=10 stopsignal = WINCH diff --git a/containers/ddev-webserver/files/etc/supervisor/conf.d/supervisor.conf b/containers/ddev-webserver/files/etc/supervisor/conf.d/supervisor.conf index 60dd764f399..22d9ba9b795 100644 --- a/containers/ddev-webserver/files/etc/supervisor/conf.d/supervisor.conf +++ b/containers/ddev-webserver/files/etc/supervisor/conf.d/supervisor.conf @@ -3,3 +3,8 @@ logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log) loglevel=info ; (log level;default info; others: debug,warn,trace) pidfile=//var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) nodaemon=false ; (start in foreground if true;default false) + +[eventlistener:child_exit_monitor] +command=/usr/local/bin/kill_supervisor.py +process_name=child_exit_monitor +events=PROCESS_STATE_FATAL,PROCESS_STATE_EXITED diff --git a/containers/ddev-webserver/files/usr/local/bin/kill_supervisor.py b/containers/ddev-webserver/files/usr/local/bin/kill_supervisor.py new file mode 100755 index 00000000000..66768d4df97 --- /dev/null +++ b/containers/ddev-webserver/files/usr/local/bin/kill_supervisor.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +import sys +import os +import signal + +# From https://blog.zhaw.ch/icclab/process-management-in-docker-containers/ + +def write_stdout(s): + sys.stdout.write(s) + sys.stdout.flush() +def write_stderr(s): + sys.stderr.write(s) + sys.stderr.flush() +def main(): + while 1: + write_stdout('READY\n') + line = sys.stdin.readline() + write_stdout('This line kills supervisor: ' + line); + try: + pidfile = open('/var/run/supervisord.pid','r') + pid = int(pidfile.readline()); + os.kill(pid, signal.SIGQUIT) + except Exception as e: + write_stdout('Could not kill supervisor: ' + e.strerror + '\n') + write_stdout('RESULT 2\nOK') +if __name__ == '__main__': + main() + import sys \ No newline at end of file diff --git a/pkg/version/version.go b/pkg/version/version.go index 40ee6a31af7..a5bb410b26b 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -25,7 +25,7 @@ var DockerComposeFileFormatVersion = "3.6" var WebImg = "drud/ddev-webserver" // WebTag defines the default web image tag for drud dev -var WebTag = "20181004_check_cms_content" // Note that this can be overridden by make +var WebTag = "20180929_nginx_quit_immediately" // Note that this can be overridden by make // DBImg defines the default db image used for applications. var DBImg = "drud/ddev-dbserver"