|
#!/bin/sh |
|
### BEGIN INIT INFO |
|
# Provides: unicorn |
|
# Required-Start: $all |
|
# Required-Stop: $network $local_fs $syslog |
|
# Default-Start: 2 3 4 5 |
|
# Default-Stop: 0 1 6 |
|
# Short-Description: Start the unicorns at boot |
|
# Description: Enable at boot time. |
|
### END INIT INFO |
|
|
|
# This is /etc/init.d/unicorn_init (without .sh) |
|
# init.d script for single or multiple unicorn installations. Expects at least one .conf |
|
# file in /etc/unicorn |
|
# |
|
# Modified by http://github.com/killercup |
|
# based on modified version by [email protected] http://github.com/jaygooby |
|
# which is based on http://gist.github.com/308216 by http://github.com/mguterl |
|
# |
|
## A sample /etc/unicorn/my_app.conf |
|
## |
|
## RAILS_ENV=production |
|
## RAILS_ROOT=/var/apps/www/my_app/current |
|
## UNICORN="/usr/local/rvm/bin/<WRAPPED_NAME>" #see rvm wrapper above |
|
# |
|
# This configures a unicorn master for your app at /var/apps/www/my_app/current running in |
|
# production mode. It will read config/unicorn.rb for further set up. |
|
# |
|
# You should ensure different ports or sockets are set in each config/unicorn.rb if |
|
# you are running more than one master concurrently. |
|
# |
|
# If you call this script without any config parameters, it will attempt to run the |
|
# init command for all your unicorn configurations listed in /etc/unicorn/*.conf |
|
# |
|
# /etc/init.d/unicorn start # starts all unicorns |
|
# |
|
# If you specify a particular config, it will only operate on that one |
|
# |
|
# /etc/init.d/unicorn start my_app |
|
|
|
set -e |
|
set -u |
|
|
|
sig () { |
|
test -s "$PID" && kill -$1 `cat "$PID"` |
|
} |
|
|
|
oldsig () { |
|
test -s "$OLD_PID" && kill -$1 `cat "$OLD_PID"` |
|
} |
|
|
|
cmd () { |
|
|
|
case $1 in |
|
start) |
|
sig 0 && echo >&2 "Already running" && exit 0 |
|
$CMD |
|
echo "Starting" |
|
;; |
|
stop) |
|
sig QUIT && echo "Stopping" && exit 0 |
|
echo >&2 "Not running" |
|
;; |
|
force-stop) |
|
sig TERM && echo "Forcing a stop" && exit 0 |
|
echo >&2 "Not running" |
|
;; |
|
restart|reload) |
|
sig USR2 && sleep 5 && oldsig QUIT && echo "Killing old master" `cat $OLD_PID` && exit 0 |
|
echo >&2 "Couldn't reload, starting '$CMD' instead" |
|
$CMD |
|
;; |
|
upgrade) |
|
sig USR2 && echo Upgraded && exit 0 |
|
echo >&2 "Couldn't upgrade, starting '$CMD' instead" |
|
$CMD |
|
;; |
|
rotate) |
|
sig USR1 && echo rotated logs OK && exit 0 |
|
echo >&2 "Couldn't rotate logs" && exit 1 |
|
;; |
|
*) |
|
echo >&2 "Usage: $0 <start|stop|restart|upgrade|rotate|force-stop>" |
|
exit 1 |
|
;; |
|
esac |
|
} |
|
|
|
setup () { |
|
|
|
echo "$RAILS_ROOT: " |
|
cd $RAILS_ROOT || exit 1 |
|
export PID=$RAILS_ROOT/tmp/pids/unicorn.pid |
|
export OLD_PID="$PID.oldbin" |
|
export RAILS_ENV=production |
|
|
|
CMD="$UNICORN -c ${RAILS_ROOT}config/unicorn.rb -D" |
|
} |
|
|
|
start_stop () { |
|
|
|
# either run the start/stop/reload/etc command for every config under /etc/unicorn |
|
# or just do it for a specific one |
|
|
|
# $1 contains the start/stop/etc command |
|
# $2 if it exists, should be the specific config we want to act on |
|
if [ $2 ]; then |
|
. /etc/unicorn/$2.conf |
|
setup |
|
cmd $1 |
|
else |
|
for CONFIG in /etc/unicorn/*.conf; do |
|
# import the variables |
|
. $CONFIG |
|
setup |
|
|
|
# run the start/stop/etc command |
|
cmd $1 |
|
done |
|
fi |
|
} |
|
|
|
ARGS="$1 $2" |
|
start_stop $ARGS |