about summary refs log tree commit homepage
path: root/examples/init.sh
diff options
context:
space:
mode:
Diffstat (limited to 'examples/init.sh')
-rw-r--r--examples/init.sh76
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