mongrelをサービスとして登録する
Mac miniをサーバ化するにあたって、railsアプリをサービスとして起動時に自動で起動するようにしたい。
railsアプリはmongrelで走らせることに決めたので、mongrelをMacで自動起動できるように設定してやる。
launchd
Mac OS XはTigerになってから、サービス(デーモン)の起動にlaunchdが利用されることになった。
伝統的なUNIXシステムでは、システムの起動時にinitというプロセスが/etc/rc.dディレクトリなどにおかれたスクリプトを実行することでサービスの起動などを実現していたが、Mac OS Xの場合はこれがlaunchdに置き換わった。
launchdは自動で起動されるデーモンなどを以下の二つに用意されたディレクトリに置かれた設定ファイルを読み込んで決めるらしい。
- /System/Library/LaunchDaemons
- /Library/LaunchDaemons
/System/Library/LaunchDaemonsのほうは、システム標準の設定ファイルの保存場所で、/Library/LaunchDaemonsはユーザがインストールした設定ファイルの保存場所。
ということで、mongrelを自動起動させるための設定ファイルは/Library/LaunchDaemonsにおけばいいことがわかる。この辺は前にインストールしたmysqlやapacheと一緒ですな。
launchdの設定ファイル
色々ぐぐった結果、mongrelを自動起動する設定ファイルは以下のように書けば良いことがわかった。
<?xml version=”1.0″ encoding=”UTF-8″?> <!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”> <plist version=”1.0″> <dict> <key>Label</key> <string>local.mongrel.books</string> <key>OnDemand</key> <false/> <key>ProgramArguments</key> <array> <string>/opt/local/bin/mongrel_rails</string> <string>start</string> <string>-e</string> <string>production</string> <string>-p</string> <string>3000</string> <string>-P</string> <string>log/mongrel.3000.pid</string> <string>-c</string> <string>/Users/Shared/Services/books</string> <string>--user</string> <string>rails</string> <string>--group</string> <string>staff</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
launchdの設定ファイルに関しては「LaunchDaemons (launchctl, launch.plist) の使い方 << maruko2 Note.」を参考に、mongrelのオプションに関しては「Mongrel HOWTO (プログラマ 福重 伸太朗 ~基本へ帰ろう~)」を参考にした。
mongrelサービスの登録
上の設定ファイルを/Library/LaunchDaemonsにlocal.mongrel.books.plistという名前でコピーしたあと、launchdのフロントエンドであるlaunchctlコマンドを利用してサービスを起動してやる。
[yuanying@Kohrin LaunchDaemons]$sudo launchctl load -w /Library/LaunchDaemons/local.mongrel.books.plist [yuanying@Kohrin LaunchDaemons]$ps aux | grep mongrel rails 1057 0.1 3.9 120848 40444 ?? Ss 6:08PM 2:22.11 /opt/local/bin/ruby /opt/local/bin/mongrel_rails start -e production -p 3000 -P log/mongrel.3000.pid -c /Users/Shared/Services/books --user rails --group staff yuanying 3813 0.0 0.0 590472 200 s000 R+ 12:53PM 0:00.00 grep mongrel
おk。