sinatra init script

sinatraの起動スクリプトかいてみた。といっても大部分は既存の起動スクリプトを見ながら書いてるけど…。
サイトごとに適宜書き換えて、別のサービスとしてchkconfigに追加したりしてる。

しかるべき箇所を書き換えればsinatra以外にも使える……はず。

#!/bin/bash
#
# chkconfig: - 85 15
# description: sinatra-y17-mydns-jp
#

PROG_NAME="sinatra-y17-mydns-jp"
PID_FILE="/tmp/${PROG_NAME}.pid"

LOG_FILE="/opt/domains/y17.mydns.jp/logs/y17-sinatra_log-$(date +%Y%m%d-%H%M%S)"
INIT_COMMAND="/usr/bin/ruby /usr/bin/shotgun -o 127.0.0.1 -p 3080 /opt/domains/y17.mydns.jp/sinatra/y17.rb"

start() {
	if test -e $PID_FILE; then
		PID="$(cat ${PID_FILE})"
		echo "[ERROR] ${PROG_NAME} is already running (pid $PID)"
		exit 1
	fi

	echo -n "Starting ${PROG_NAME} .. "
	nohup ${INIT_COMMAND} > ${LOG_FILE} 2>&1 &
#	PID=$$
	PID=$(ps -o pid,command ax | grep -e "${INIT_COMMAND}" | grep -v grep | head | awk '{print $1}')
	if test $? -eq 0; then
		echo "[  OK  ]"
		echo $PID > "${PID_FILE}"
	else 
		echo -n "[FAILED]"
		exit 1
	fi
}

stop() {
	if test -e ${PID_FILE}; then
		PID="$(cat ${PID_FILE})"
	else
		echo "[ERROR] ${PROG_NAME} is already stopped."	
		exit 1
	fi

	echo -n "Stopping ${PROG_NAME} .. "
	kill ${PID}
	if test $? -eq 0; then
		echo "[  OK  ]"
		rm ${PID_FILE}
	else 
		echo "[FAILED]"
		exit 1
	fi
}

case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  restart)
  stop
  start
  ;;
  *)
  echo $"Usage: $0 {start|stop|restart}"
  exit 1
esac