120 lines
3.1 KiB
Django/Jinja
Executable File
120 lines
3.1 KiB
Django/Jinja
Executable File
#!/bin/sh
|
|
#
|
|
# init.d script for single or multiple unicorn installations. Expects at least one .conf
|
|
# file in /etc/unicorn
|
|
#
|
|
# Modified by jay@gooby.org http://github.com/jaygooby
|
|
# 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
|
|
#
|
|
# 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 /etc/unicorn/my_app.conf
|
|
|
|
set -e
|
|
|
|
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
|
|
echo "Starting"
|
|
$CMD
|
|
;;
|
|
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)
|
|
sig USR2 && echo "Starting new process" && sleep 5 && oldsig QUIT && echo "Killing old master" `cat $OLD_PID` && exit 0
|
|
echo >&2 "Couldn't reload, starting '$CMD' instead"
|
|
$CMD
|
|
;;
|
|
reload)
|
|
sig HUP && echo "Reloading Config" && 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 -n "$RAILS_ROOT: "
|
|
cd $RAILS_ROOT || exit 1
|
|
export PID=$RAILS_ROOT/tmp/pids/unicorn.pid
|
|
export OLD_PID="$PID.oldbin"
|
|
export HOME=$RAILS_ROOT
|
|
export RAILS_ENV=$RAILS_ENV
|
|
CMD="{{ rvm1_install_path }}/wrappers/{{site.ruby}}@{{site.gemset}}/unicorn_rails -c config/unicorn.rb -E $RAILS_ENV -D"
|
|
CMD="{{ rvm1_install_path }}/wrappers/{{site.ruby}}@{{site.gemset}}/bundle exec unicorn_rails -c config/unicorn.rb -E $RAILS_ENV -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
|
|
. $2
|
|
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
|