Last active
October 13, 2016 22:24
-
-
Save alobato/5130853 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
### BEGIN INIT INFO | |
# Provides: unicorn | |
# Required-Start: $all | |
# Required-Stop: $network $remote_fs $local_fs $syslog | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: Starts the unicorn app server | |
# Description: Starts unicorn using start-stop-daemon | |
### END INIT INFO | |
# https://unicorn.bogomips.org/SIGNALS.html | |
# http://unicorn.bogomips.org/examples/init.sh | |
# If a command fails, set -e will make the whole script exit, | |
# instead of just resuming on the next line. | |
set -e | |
# Treat unset variables as an error, and immediately exit. | |
# Exit your script if you try to use an uninitialised variable | |
set -u | |
# Feel free to change any of the following variables for your app: | |
APP_NAME=appname | |
AS_USER=deployer | |
HOME_PATH=/home/$AS_USER | |
APP_ROOT=$HOME_PATH/apps/$APP_NAME | |
CURRENT_APP_ROOT=$APP_ROOT/current | |
INIT_CONF=$HOME_PATH/.unicorn/$APP_NAME/config.rb | |
TIMEOUT=${TIMEOUT-60} | |
# make sure the app exists | |
cd $CURRENT_APP_ROOT || exit 1 | |
CMD="cd $CURRENT_APP_ROOT && bundle exec unicorn -D -c $INIT_CONF -E production" | |
PID=$APP_ROOT/shared/pids/unicorn.pid | |
OLD_PIN="$PID.oldbin" | |
sig () { | |
test -s "$PID" && kill -$1 `cat $PID` | |
} | |
oldsig () { | |
test -s $OLD_PIN && kill -$1 `cat $OLD_PIN` | |
} | |
case "$1" in | |
start) | |
sig 0 && echo >&2 "Already running" && exit 0 | |
echo "Starting" | |
su - $AS_USER -c "$CMD" | |
;; | |
stop) | |
echo "Stopping" | |
sig QUIT && exit 0 | |
echo >&2 "Not running" | |
;; | |
force-stop) | |
echo "Force stopping" | |
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" | |
su - $AS_USER -c "$CMD" | |
;; | |
upgrade) | |
if sig USR2 && sleep 2 && sig 0 && oldsig QUIT | |
then | |
n=$TIMEOUT | |
while test -s $OLD_PIN && test $n -ge 0 | |
do | |
printf '.' && sleep 1 && n=$(( $n - 1 )) | |
done | |
echo | |
if test $n -lt 0 && test -s $OLD_PIN | |
then | |
echo >&2 "$OLD_PIN 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 rotated logs OK && exit 0 | |
echo >&2 "Couldn't rotate logs" && exit 1 | |
;; | |
*) | |
echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>" | |
exit 1 | |
;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment