Skip to content

Instantly share code, notes, and snippets.

@netflash
Forked from tomazzaman/README.md
Created June 26, 2018 19:59
Show Gist options
  • Save netflash/ba4c0815f54eee86490d6686ff9c5809 to your computer and use it in GitHub Desktop.
Save netflash/ba4c0815f54eee86490d6686ff9c5809 to your computer and use it in GitHub Desktop.
Kill supervisor on Docker when any of the services fail

Killing supervisor if any of it's child processes fail

The trick is to only register the listener for events that indicate failure, namely

  • PROCESS_STATE_STOPPED
  • PROCESS_STATE_EXITED
  • PROCESS_STATE_FATAL

Once they do, we should send a SIGQUIT to Supervisor.

#!/bin/bash
printf "READY\n";
while read line; do
echo "Processing Event: $line" >&2;
kill -3 $(cat "/var/run/supervisord.pid")
done < /dev/stdin
[supervisord]
nodaemon=true
loglevel=debug
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor
[program:nginx]
command=nginx -g "daemon off;"
redirect_stderr=true
[program:php-fpm]
command=php-fpm
redirect_stderr=true
[eventlistener:processes]
command=stop-supervisor.sh
events=PROCESS_STATE_STOPPED, PROCESS_STATE_EXITED, PROCESS_STATE_FATAL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment