Date: 2013/9/10 Cate: Linux Tags: , ,  

サーバー起動時に自動起動させるために、/etc/init.d/以下に起動スクリプトを置いたりするかとおもいます。
僕もRailsで開発をしてるときに、unicornやresqueを自動起動させるためにスクリプト書いておいています。

【Rails】resqueのinit.dの起動スクリプト « zoomAroid
↑こんなかんじ

で、

$ sudo service hogehoge start

というように手動で起動するとうまく動いたので、おっけーと思って使ってたのですが、いざサーバーを再起動したときに動いておらん!ヤバイ!ということがありました。
しかも同じスクリプト使ってる他のサービスではうまく動いてて、あるサービスでは動いてあるサービスでは動かないという状況になってしまっててかなりハマりました。


起動する順序に気をつけないといけない

ここで結構ハマったのですが、結論からいうと

MySQLが起動する前にUnicornが起動しようとしてて、うまく起動できなかった

ということが原因でした。
「あるサービスでは動いててあるサービスでは動かなかった」というのも、ちゃんと動くサービスはMySQLが別のサーバー(RDSとか)にあって、Unicornが動いているサーバーをリブートしてもMySQLはちゃんと動いてるから、ということでした。なるほど。
で、init.dにおいたスクリプトの自動起動の順番というのは、スクリプトの実体にある

#! /bin/sh

### BEGIN INIT INFO
# Provides:          unicorn
# chkconfig:         3456 85 35
# Required-Start:    $all
# Required-Stop:     $network $local_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the unicorn web server
# Description:       starts unicorn
### END INIT INFO

こういう部分の

# chkconfig:         3456 85 35

これですね。
こいつを書いていなかったのですが、この数字、何を意味するかというと、

3456 run levelの指定(-だと多分全部のランレベル)
85 起動時の順番(数字が少ない→大きいの順)
35 終了時の順番(同上)

という感じです。
で、/etc/init.d/mysqlをみてみると、起動時の順番が64とかになっていたので、それより大きい数字を指定してあげればunicornがmysqlの起動後に起動される、ということです。
なるほど。

Leave a Reply