LoginSignup
14
14

More than 5 years have passed since last update.

Redmine起動スクリプト(/etc/init.d/redmine)のサンプル

Posted at

目的

Ansbile-Redmineの起動スクリプト(/etc/init.d/redmine)がつたない感じなのでリファクタリングする。
Nginx等みたいに、[OK]とか[NG]とか出したい。
一回理解すれば他でも活用できそう。

CentOSの起動スクリプト(/etc/init.d/redmine)を[OK]とか出せるようにリファクタリングする。 · Issue #7 · volanja/ansible-Redmine

今回の環境

Ansible-Redmine v0.1と同じ(たぶん)。

  • CentOS 6.4
  • rbenv 0.4.0-89-g14bc162
  • redmine 2.4.1
  • Unicorn 4.8.0

起動コマンドの実行例

今回のリファクタリングで以下のようにすることができた。

# service redmine start
Starting redmine:              [  OK  ]

# service redmine restart
Stopping redmine:              [  OK  ]
Starting redmine:              [  OK  ]

# service redmine stop
Stopping redmine:              [  OK  ]

他にも、reloadなどがある。

起動スクリプト(/etc/init.d/redmine)のコード

コードは以下の通り。
方針としては、/etc/init.d/functionsを有効活用して自作しないようにする。

#! /bin/sh

# chkconfig: - 85 15

### BEGIN INIT INFO
# Provides:          redmine
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Redmine Project management software
# Description:       Redmine Project management software
### END INIT INFO

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

### Environment variables
RAILS_ENV="production"

# Feel free to change any of the following variables for your app:
APP_ROOT=/home/redmine/redmine
APP_USER="redmine"
PID=${APP_ROOT}/tmp/pids/unicorn.pid
CMD="/home/redmine/.rbenv/shims/bundle exec unicorn_rails -D -c ${APP_ROOT}/config/unicorn.rb -E ${RAILS_ENV}"
INIT_CONF=${APP_ROOT}/config/init.conf
action="$1"
RETVAL=0
prog="redmine"

test -f "${INIT_CONF}" && . ${INIT_CONF}

cd ${APP_ROOT} || exit 1

start(){
  echo -n $"Starting $prog: "
  daemon --pidfile=${PID} --user=${APP_USER} "cd ${APP_ROOT} && ${CMD}" 
  RETVAL=$?
  echo
}

stop(){
  echo -n $"Stopping $prog: "
  killproc -p ${PID} ${prog} -QUIT
  RETVAL=$?
  echo
}

rh_status() {
    status -p ${PID} ${prog}
}

force_stop(){
  echo -n $"Force-Stopping $prog: "
  killproc -p ${PID} ${prog} -TERM
  RETVAL=$?
  echo
}

reload(){
  echo -n $"Reloading $prog: "
  killproc -p ${PID} ${prog} -HUP
  RETVAL=$?
  echo
}

upgrade(){
  old_pid=${PID}.oldbin
  echo -n $"Staring new master $prog: "
  killproc -p ${PID} ${prog} -USR2
  RETVAL=$?
  echo
  sleep 2
  if [ -f ${old_pid} -a -f ${PID} ]; then
      echo -n $"Graceful shutdown of old $prog: "
      killproc -p ${old_pid} ${prog} -QUIT
      RETVAL=$?
      echo 
  else
      echo $"Upgrade failed!"
      return 1
  fi
}

reopen_logs(){
  echo -n $"ReOpening Logs $prog: "
  killproc -p ${PID} ${prog} -USR1
  RETVAL=$?
  echo
}

case $action in
start)
  start
  ;;
stop)
  stop
  ;;
status)
  rh_status
  ;;
force-stop)
  force_stop
  ;;
restart)
  stop
  sleep 2
  start
  ;;
reload)
  reload
  ;;
upgrade)
  upgrade
  ;;
reopen-logs)
  reopen_logs
  ;;
*)
  echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
  exit 1
  ;;
esac
exit 0

参考

/etc/init.d/functions を読む
/etc/init.d/functions の解説

14
14
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
14
14