LoginSignup
35
32

More than 5 years have passed since last update.

Rails server(WEBrick)をデーモンぽく起動/停止/再起動するスクリプト作ったよ

Last updated at Posted at 2013-12-27

以下のスクリプトを適当なファイル名で保存&実行権限をつければOK
Rails4.0.2環境下で動作確認しましたが、多分だいたい大丈夫なはず。

#!/bin/sh
set -e
set -u

# アプリケーションのルートディレクトリを指定
APPLICATION_ROOT="/your/project/path"

# オプション設定
# 下記はデフォルトの値。変更したい場合は適宜編集
# ENVIRONMENT = test/development/production のいずれか。
PORT="3000"
BINDING_IP="0.0.0.0"
ENVIRONMENT="development"

start () {
  cd ${APPLICATION_ROOT}
  rails server --daemon --binding=${BINDING_IP} --port=${PORT} --environment=${ENVIRONMENT}
}

stop () {
  cat ${APPLICATION_ROOT}/tmp/pids/server.pid | xargs kill -9
}

restart () {
  stop
  start
}

status () {
  # プロセスを表示。起動していなければ表示なし
  # ちょっと手抜き実装。
  ps aux | grep "[r]ails server"
}

help () {
  echo "Usage: $0 {start|stop|restart|status|help}"
}

# 引数のサイズをチェック
# set -u と $1を併用するためのhack
# http://tech.lampetty.net/tech/index.php/archives/455
if [ $# -lt 1 ]; then
    help
    exit 1
fi

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  status)
    status
    ;;
  help)
    help
    ;;
  *)
    help
    exit 1
esac

exit $?

仮に"Rserver"というファイル名にしたのであれば、

$ ./Rserver # help表示
$ ./Rserver help # help表示
$ ./Rserver start # 起動
$ ./Rserver stop # 停止
$ ./Rserver restart # 再起動
$ ./Rserver status # (起動していれば)プロセス表示

webサーバが起動していない場合に停止コマンドを叩くと、関係ないプロセスを殺す可能性がある、
というバグが残っているので、ご利用は計画的に。そのうちなおします。

35
32
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
35
32