diff options
Diffstat (limited to 'examples/init.sh')
-rw-r--r-- | examples/init.sh | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/examples/init.sh b/examples/init.sh new file mode 100644 index 0000000..9464220 --- /dev/null +++ b/examples/init.sh @@ -0,0 +1,76 @@ +#!/bin/sh +# 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 + +# Feel free to change any of the following variables for your app: +TIMEOUT=${TIMEOUT-60} +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 +action="$1" +set -u + +test -f "$INIT_CONF" && . $INIT_CONF + +old_pid="$PID.oldbin" + +cd $APP_ROOT || exit 1 + +sig () { + test -s "$PID" && kill -$1 `cat $PID` +} + +oldsig () { + test -s $old_pid && kill -$1 `cat $old_pid` +} + +case $action in +start) + sig 0 && echo >&2 "Already running" && exit 0 + $CMD + ;; +stop) + sig QUIT && exit 0 + echo >&2 "Not running" + ;; +force-stop) + sig TERM && exit 0 + echo >&2 "Not running" + ;; +restart|reload) + sig HUP && echo reloaded OK && exit 0 + echo >&2 "Couldn't reload, starting '$CMD' instead" + $CMD + ;; +upgrade) + if sig USR2 && sleep 2 && sig 0 && oldsig QUIT + then + n=$TIMEOUT + while test -s $old_pid && test $n -ge 0 + do + printf '.' && sleep 1 && n=$(( $n - 1 )) + done + echo + + if test $n -lt 0 && test -s $old_pid + then + echo >&2 "$old_pid still exists after $TIMEOUT seconds" + exit 1 + fi + exit 0 + fi + echo >&2 "Couldn't upgrade, starting '$CMD' instead" + $CMD + ;; +reopen-logs) + sig USR1 + ;; +*) + echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>" + exit 1 + ;; +esac |