: O. Yuanying

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におけばいいことがわかる。この辺は前にインストールしたmysqlapacheと一緒ですな。

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。

参考