どうも。
複数のサービスを運用するようになったらunicornのstart, stopを毎回コマンド1つずつ打つのも面倒でしょうから、予めコマンドを登録しておいて一発ですべて起動/停止出来るようにしたほうが楽じゃね?ということで、実際に作りました。
下記を参考にしました。
新コマンド一覧
UnicornをStart
# command for starting unciorn #!/bin/sh function startService () { cd $1 bundle exec unicorn_rails -c config/unicorn.rb -D -E development } function startAllServices () { rails_root="Rails rootのパス" dir=( "${rails_root}/サービス名1" "${rails_root}/サービス名2" "${rails_root}/サービス名3" ... ) for i in "${dir[@]}" do startService "${i}" done } if [ $# -eq 1 ]; then echo "サービス"$1"を起動" rails_root="Rails rootのパス" startService "${rails_root}/$1" else echo "すべてのサービスを起動" startAllServices fi ps -ef | grep unicorn | grep -v grep
UnicornをStop
# command for stopping unciorn #!/bin/sh function stopService () { cd $1 kill -9 `cat "tmp/development_unicorn.pid"` } function stopAllServices () { rails_root="Rails rootのパス" dir=( "${rails_root}/サービス名1" "${rails_root}/サービス名2" "${rails_root}/サービス名3" ... ) for i in "${dir[@]}" do stopService "${i}" done } if [ $# -eq 1 ]; then echo "サービス"$1"を停止" rails_root="Rails rootのパス" stopService "${rails_root}/$1" else echo "すべてのサービスを停止" stopAllServices fi ps -ef | grep unicorn | grep -v grep
サービス一覧を表示
# command for listing up services #!/bin/sh rails_root="Rails rootのパス" ls -l ${rails_root} | grep -v @ | awk '{print $9}' | grep -v 'README.md'
途中grep -vしているのは、余計なシンボリックリンクを含ませたくないためです。
ディレクトリ一覧を表示
PC起動してからcd ~~とするのに便利。
# command for listing up service directories #!/bin/sh rails_root="Rails rootのパス" ls -l ${rails_root} | grep -v @ | awk '{print $9}' | grep -v 'README.md' | xargs -Iargs echo ${rails_root}/args
配置例
俺の場合は/usr/local/bin/直下に配置しています。
実行方法
すべてのサービスをstartする
start_unicorn
特定のサービスをstartする
start_unicorn サービス名1
すべてのサービスをstopする
stop_unicorn
特定のサービスをstopする
stop_unicorn サービス名1
サービス一覧を表示
list_unicorn_service
サービスのディレクトリ一覧を表示
list_service_dir
といった感じ。これでいちいちkillしてbundle exec ~~ってただ面倒なコマンドを繰り返す必要がなくなりました。簡単なのでお試しあれ。