Norikraのinit shell scriptを共有

develop環境で毎回手動で起動・停止していましたが、production環境へのデプロイが迫ってきたので init script を作りました。
せっかくなので共有しておきます。

norikra ユーザを作成し、rbenv 経由で jruby をインストールした環境から norikra ユーザを指定しての起動を想定していますが、script中の NORIKRA_USER、NORIKRA_GROUP を変更してもらえれば任意のユーザで起動出来ると思います。
役立てていただければ幸いです。

オプションの指定とか、諸々間違っていたりする点があればコメントからご指摘ください。

---

### 必要ディレクトリ
* /etc/norikra
* /var/log/norikra
* /var/run/norikra

→　実行ユーザ&グループで作成

### ファイル実体
* /etc/sysconfig/norikra (chown root.)

		NORIKRA_OPT="-Xmx4g -Xms4g -Xmn1g -XX:+UseConcMarkSweepGC -d"

→　環境に合わせて設定してください。

* /etc/rc.d/init.d/norikra (chown root. ;chmod +x) 

		#!/bin/bash
		#
		# Norikra init shellscript
		#   Copyright 2015, Kedamari
		#
		# /etc/rc.d/init.d/norikra
		#
		# chkconfig: - 80 20
		# description: norikra
		# processname: norikra
		# pidfile: /var/run/norikra/norikra.pid

		##########################
		### Disabled http_proxy 
		##########################
		unset http_proxy
		unset HTTP_PROXY

		##########################
		### Definition
		##########################
		export PATH=/sbin:/usr/sbin:/bin:/usr/bin

		NORIKRA_NAME=Norikra
		NORIKRA_HOME=/etc/norikra
		NORIKRA_DEFAULT=/etc/sysconfig/norikra

		NORIKRA_USER=norikra
		NORIKRA_GROUP=norikra

		NORIKRA_LOG_DIR=/var/log/norikra
		NORIKRA_BIN_FILE=/home/norikra/.rbenv/shims/norikra
		NORIKRA_PID_FILE=/var/run/norikra/norikra.pid
		NORIKRA_LOCK_FILE=/var/run/norikra/norikra.lock
		NORIKRA_STATS_FILE=${NORIKRA_HOME}/norikra.json

		. "${NORIKRA_DEFAULT}"
		NORIKRA_OPTIONS="start ${NORIKRA_OPT} --pidfile=${NORIKRA_PID_FILE} --stats=${NORIKRA_STATS_FILE} --logdir=${NORIKRA_LOG_DIR} --middle"

		START_STOP_DAEMON_ARGS="-l ${NORIKRA_USER} -g ${NORIKRA_GROUP}"

		# timeout can be overridden from /etc/sysconfig/td-agent
		STOPTIMEOUT=120
		RETVAL=0

		# Source function library.
		. /etc/init.d/functions

		##########################
		### Function that starts
		##########################

		do_start() {
		  ulimit -n 65536 1>/dev/null 2>&1 || true
		  echo -n "Starting ${NORIKRA_NAME}: "
		  local RETVAL=0
		  runuser ${START_STOP_DAEMON_ARGS} -c bash -c "${NORIKRA_BIN_FILE} ${NORIKRA_OPTIONS}" || RETVAL="$?"
		  [ $RETVAL -eq 0 ] && success && touch "${NORIKRA_LOCK_FILE}" || failure
		  echo
		  return $RETVAL
		}

		##########################
		### Function that stops
		##########################
		do_stop() {
		  echo -n "Shutting down ${NORIKRA_NAME}: "
		  local RETVAL=0
		  if [ -e "${NORIKRA_PID_FILE}" ]; then
		    # Use own process termination instead of killproc because killproc can't wait SIGTERM
		    NORIKRA_PID=`cat "${NORIKRA_PID_FILE}" 2>/dev/null`

		    ${NORIKRA_BIN_FILE} stop >/dev/null 2>&1 || RETVAL="$?"
		    if [ $RETVAL -eq 0 ]; then
		      TIMEOUT="$STOPTIMEOUT"
		      while [ $TIMEOUT -gt 0 ]; do
		        ${NORIKRA_BIN_FILE} stop >/dev/null 2>&1 || break
		        sleep 1
		        let TIMEOUT="${TIMEOUT}-1" || true
		      done
		      if [ "$TIMEOUT" -eq 0 ]; then
		        echo -n "Timeout error occurred trying to stop ${NORIKRA_NAME}..."
		        RETVAL=1
		        failure || true
		      else
		        RETVAL=0
		        success
		      fi
		    else
		      failure || true
		    fi
		  else
		    failure || true
		    RETVAL=4
		  fi

		  echo
		  [ $RETVAL -eq 0 ] && rm -f "${NORIKRA_PID_FILE}" && rm -f "${NORIKRA_LOCK_FILE}"
		  return $RETVAL
		}

		##########################
		### Function that restarts
		##########################
		do_restart() {
		  do_stop || true
		  do_start
		}

		case "$1" in
		"start" )
		  test -f ${NORIKRA_LOCK_FILE} || false
		  do_start
		  ;;
		"stop" )
		  do_stop
		  ;;
		"restart" )
		  do_restart
		  ;;
		"status" )
		  status -p "${NORIKRA_PID_FILE}" "${NORIKRA_NAME}"
		  ;;
		* )
		  echo "Usage: $0 {start|stop|restart|status}" >&2
		  exit 1
		  ;;
		esac

startに daemon を使用したかったのですが、rbenv が ＄HOME の環境変数を直接叩く為、bash -c 経由で起動する必要があり、runuser コマンドから直接起動しています。