From d821539c6a63d1fbeaf9f56811aaf9b2be11185d Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 26 Jan 2016 16:25:37 +1100 Subject: [PATCH] FIX: force all sub processes to stop on TERM, wait for them to finish This works around docker bug where containers will not stop --- image/base/Dockerfile | 2 +- image/base/boot | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/image/base/Dockerfile b/image/base/Dockerfile index 0ee8c6f..49924e1 100644 --- a/image/base/Dockerfile +++ b/image/base/Dockerfile @@ -29,7 +29,7 @@ RUN echo "debconf debconf/frontend select Teletype" | debconf-set-selections &&\ apt-get -y install build-essential git curl wget \ libxslt-dev libcurl4-openssl-dev \ libssl-dev libyaml-dev libtool \ - libxml2-dev gawk \ + libxml2-dev gawk parallel \ postgresql-9.3 postgresql-client-9.3 \ postgresql-contrib-9.3 libpq-dev libreadline-dev \ nginx language-pack-en sudo cron anacron \ diff --git a/image/base/boot b/image/base/boot index 38b5294..3e46a06 100755 --- a/image/base/boot +++ b/image/base/boot @@ -2,9 +2,26 @@ # we use this to boot up cause runit will not handle TERM and will not exit when done +shutdown() { + echo Shutting Down + /etc/runit/3 + ls /etc/service | SHELL=/bin/sh parallel sv force-stop {} + kill -HUP $RUNSVDIR + wait $RUNSVDIR + + # give stuff a bit of time to finish + sleep 0.1 + + ORPHANS=`ps -eo pid | grep -v PID | tr -d ' ' | grep -v '^1$'` + SHELL=/bin/bash parallel 'timeout 5 /bin/bash -c "kill {} && wait {}" || kill -9 {}' ::: $ORPHANS 2> /dev/null + exit +} + /etc/runit/1 /etc/runit/2& RUNSVDIR=$! echo "Started runsvdir, PID is $RUNSVDIR" -trap "echo Shutting Down && /etc/runit/3 && kill -HUP $RUNSVDIR && wait $RUNSVDIR" SIGTERM SIGHUP +trap shutdown SIGTERM SIGHUP wait $RUNSVDIR + +shutdown -- 2.25.1