From 84989a48f20d1bc383a9925b919edc66fc4bccdb Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 7 Jul 2016 01:06:45 +0000 Subject: update init and add systemd examples Reduce raciness in the init script and add LSB tags. However, the systemd examples should be race-free and safer (if one feels safe using systemd :P) --- examples/init.sh | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) (limited to 'examples/init.sh') diff --git a/examples/init.sh b/examples/init.sh index 9464220..6fe1ae6 100644 --- a/examples/init.sh +++ b/examples/init.sh @@ -2,8 +2,14 @@ # To the extent possible under law, Eric Wong has waived all copyright and # related or neighboring rights to this examples set -e -# Example init script, this can be used with nginx, too, -# since nginx and yahns accept the same signals +### BEGIN INIT INFO +# Provides: yahns +# Required-Start: $local_fs $network +# Required-Stop: $local_fs $network +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start/stop yahns Ruby app server +### END INIT INFO # Feel free to change any of the following variables for your app: TIMEOUT=${TIMEOUT-60} @@ -11,21 +17,22 @@ APP_ROOT=/home/x/my_app/current PID=$APP_ROOT/tmp/pids/yahns.pid CMD="/usr/bin/yahns -D -c $APP_ROOT/config/yahns.rb" INIT_CONF=$APP_ROOT/config/init.conf +UPGRADE_DELAY=${UPGRADE_DELAY-2} action="$1" set -u test -f "$INIT_CONF" && . $INIT_CONF -old_pid="$PID.oldbin" +OLD="$PID.oldbin" cd $APP_ROOT || exit 1 sig () { - test -s "$PID" && kill -$1 `cat $PID` + test -s "$PID" && kill -$1 $(cat $PID) } oldsig () { - test -s $old_pid && kill -$1 `cat $old_pid` + test -s "$OLD" && kill -$1 $(cat $OLD) } case $action in @@ -47,18 +54,36 @@ restart|reload) $CMD ;; upgrade) - if sig USR2 && sleep 2 && sig 0 && oldsig QUIT + if oldsig 0 + then + echo >&2 "Old upgraded process still running with $OLD" + exit 1 + fi + + cur_pid= + if test -s "$PID" + then + cur_pid=$(cat $PID) + fi + + if test -n "$cur_pid" && + kill -USR2 "$cur_pid" && + sleep $UPGRADE_DELAY && + new_pid=$(cat $PID) && + test x"$new_pid" != x"$cur_pid" && + kill -0 "$new_pid" && + kill -QUIT "$cur_pid" then n=$TIMEOUT - while test -s $old_pid && test $n -ge 0 + while kill -0 "$cur_pid" 2>/dev/null && test $n -ge 0 do printf '.' && sleep 1 && n=$(( $n - 1 )) done echo - if test $n -lt 0 && test -s $old_pid + if test $n -lt 0 && kill -0 "$cur_pid" 2>/dev/null then - echo >&2 "$old_pid still exists after $TIMEOUT seconds" + echo >&2 "$cur_pid still running after $TIMEOUT seconds" exit 1 fi exit 0 -- cgit v1.2.3-24-ge0c7