ランサーズ Advent Calendar 2017の20日目を担当します、ota(@purratto)です。
今回はAmazon Linux再起動時にUnicornを自動的に起動させる方法を解説します。
実装方法
Unicornを自動的に起動させたいサーバ内に /etc/init.d/unicorn を作成し、下記のように編集します。
#!/bin/sh
#chkconfig:2345 84 16
#description:unicorn shell
. /etc/rc.d/init.d/functions
NAME="Unicorn"
ENV="hoge_env"
ROOT_DIR="/var/www/hoge_dir/current/"
PID_FILE="/var/www/hoge_dir/shared/tmp/pids/unicorn.pid"
PS_PID=$(ps -aef | grep master | grep unicorn | awk '{print $2}')
CONF="${ROOT_DIR}config/unicorn/${ENV}.rb"
start()
{
PS_PID=$(ps -aef | grep master | grep unicorn | awk '{print $2}')
if [[ ! -z ${PS_PID} ]] ; then
echo "${NAME} already started"
exit 0
fi
echo -n "start ${NAME} : "
daemon $(su -l hoge_user -c "(cd ${ROOT_DIR} && RAILS_ENV=${ENV} /usr/local/rbenv/shims/bundle exec unicorn -c ${CONF} -E ${ENV} -D )")
echo
}
stop()
{
if [[ -z ${PS_PID} ]]; then
echo "${NAME} not started"
exit 1
fi
echo -n "stop ${NAME} : "
daemon $(kill ${PS_PID})
echo
rm -f ${PID_FILE}
while :
do
PS_PID=$(ps -aef | grep master | grep unicorn | awk '{print $2}')
if [[ -z "${PS_PID}" ]]; then
break
fi
usleep 100000
done
}
status()
{
if [[ -z ${PS_PID} ]]; then
echo "${NAME} is stop"
else
echo "${NAME} is running"
fi
}
restart()
{
if [[ -z ${PS_PID} ]]; then
echo "${NAME} not started"
else
echo -n "stop ${NAME} : "
daemon $(kill ${PS_PID})
echo
rm -f ${PID_FILE}
while :
do
PS_PID=$(ps -aef | grep master | grep unicorn | awk '{print $2}')
if [[ -z ${PS_PID} ]]; then
break
fi
usleep 100000
done
fi
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
*)
echo "Syntax Error: release [start|stop|restart|status]"
;;
esac
下記のコマンドを実行します。
$ chkconfig –add unicorn
$ chkconfig unicorn on
$ chmod 755 /etc/init.d/unicorn
以上です。参考になれば幸いです。