4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Norikraのinit shell scriptを共有

Last updated at Posted at 2015-11-06

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 コマンドから直接起動しています。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?