Ruby unicorn 起動スクリプト
unicorn 起動スクリプトを作成してみました。
というか、OS標準のrubyがインストールされている状態で、別Verのrubyを
ソースインストールしたら、OSリブート時にunicornが自動起動されなかったので
メモ。
ちなみに、手動で起動スクリプトをキックした場合は正常に動作する状態です。
OSリブート時のエラーメッセージ
/usr/lib/ruby/site_ruby/1.8/rubygems/dependency.rb:247:in `to_specs': Could not find unicorn (>= 0) amongst [aws-sdk-1.8.1.2, json-1.4.6, nokogiri-1.5.6, uuidtools-2.1.1] (Gem::LoadError) from /usr/lib/ruby/site_ruby/1.8/rubygems/dependency.rb:256:in `to_spec' from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:1211:in `gem' from /usr/local/ruby/bin/unicorn:22
結果、スクリプト内に export PATH=/usr/local/ruby/bin:$PATH が必要でした。
以下の #gem env > /tmp/gem-env.txt を仕込む事により、原因を突き止めました。
/etc/init.d/unicorn
#!/bin/sh # unicorn - this script starts and stops the unicorn daemon # # chkconfig: 2345 70 23 # description: unicorn # processname: unicorn set -e TIMEOUT=${TIMEOUT-60} export PATH=/usr/local/ruby/bin:$PATH #export GEM_HOME=/usr/local/ruby-1.9.3-p286/lib/ruby/gems/1.9.1 #export RUBYLIB=/usr/local/ruby-1.9.3-p286/lib/ruby/gems/1.9.1 APP_ROOT=/pathto/xxxx PID=/var/run/unicorn.pid CMD="/usr/local/ruby/bin/unicorn -D -c $APP_ROOT/config/unicorn.rb -E production" #CMD="/usr/local/ruby/bin/unicorn_rails -D -c $APP_ROOT/config/unicorn.rb -E production" #CMD="bundle exec unicorn -D -c $APP_ROOT/config/unicorn.rb -E production" #gem env > /tmp/gem-env.txt action="$1" set -u old_pid="$PID.oldbin" cd $APP_ROOT || exit 1 sig () { test -s "$PID" && kill -$1 `cat $PID` } oldsig () { test -s $old_pid && kill -$1 `cat $old_pid` } case $action in start) sig 0 && echo >&2 "Already running" && exit 0 $CMD && printf "\e[36m Started success. \e[m\n" ;; stop) sig QUIT && printf "\e[36m Stopped success. \e[m\n" && exit 0 echo >&2 "Not running" ;; force-stop) sig TERM && exit 0 echo >&2 "Not running" ;; restart|reload) sig HUP && echo reloaded OK && exit 0 echo >&2 "Couldn't reload, starting '$CMD' instead" $CMD ;; upgrade) if sig USR2 && sleep 2 && sig 0 && oldsig QUIT then n=$TIMEOUT while test -s $old_pid && test $n -ge 0 do printf '.' && sleep 1 && n=$(( $n - 1 )) done echo if test $n -lt 0 && test -s $old_pid then echo >&2 "$old_pid still exists after $TIMEOUT seconds" exit 1 fi exit 0 fi echo >&2 "Couldn't upgrade, starting '$CMD' instead" $CMD ;; reopen-logs) sig USR1 ;; *) echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>" exit 1 ;; esac
OS起動時の gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.8.11
- RUBY VERSION: 1.8.7 (2012-10-12 patchlevel 371) [x86_64-linux]
- INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
- RUBY EXECUTABLE: /usr/bin/ruby
- EXECUTABLE DIRECTORY: /usr/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /usr/lib/ruby/gems/1.8
- /.gem/ruby/1.8
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://rubygems.org/
OS起動後の gem env (使いたいのはこっち)
RubyGems Environment:
- RUBYGEMS VERSION: 1.8.24
- RUBY VERSION: 1.9.3 (2012-10-12 patchlevel 286) [x86_64-linux]
- INSTALLATION DIRECTORY: /usr/local/ruby-1.9.3-p286/lib/ruby/gems/1.9.1
- RUBY EXECUTABLE: /usr/local/ruby-1.9.3-p286/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/ruby-1.9.3-p286/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /usr/local/ruby-1.9.3-p286/lib/ruby/gems/1.9.1
- /root/.gem/ruby/1.9.1
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://rubygems.org/
以上です。