Macでrailsアプリをサービスとして起動時に自動で起動するようにしたい。今回railsアプリはApacheでなくmongrelで走らせることにしたので、mongrelがMacで自動起動するよう設定してやる必要がある。
Mac OS XはTiger以降はlaunchdを採用(initではなく)。
launchdは自動で起動されるデーモンなどを以下の2つに用意されたディレクトリに置かれた設定ファイルを読み込む。
前者はシステム標準の設定ファイルの保存場所なので、今回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.quaint</string> <key>OnDemand</key> <false/> <key>ProgramArguments</key> <array> <string>/usr/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/quaint/cms</string> <string>--user</string> <string>quaint</string> <string>--group</string> <string>staff</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>上記の例では、
上の設定ファイルを/Library/LaunchDaemons/にたとえば『local.mongrel.quaint.plist』という名前でコピーしたあと、 ownerがrootになっていることを確認する。
% sudo cp local.mongrel.quaint.plist /Library/LaunchDaemons Password: % ls -l /Library/LaunchDaemons total 24 -rw-r--r-- 1 root wheel 795 Jun 26 07:27 com.google.keystone.daemon.plist -rwxr-xr-x@ 1 root wheel 737 Oct 16 10:57 local.mongrel.quaint.plist* lrwxr-xr-x 1 root wheel 74 Sep 30 07:44 org.macports.mysql5.plist@ -> /opt/local/etc/LaunchDaemons/org.macports.mysql5/org.macports.mysql5.plist
ファインダーでコピー(や移動)した場合は、ownerがrootになってないはずなので、chownしておくこと。
正しい内容が書かれ、ファイルの置き場所も、ownerも問題なければ、あとは再起動すれば起動するはずであるが、 うまくいかなかったときに、原因を探すのにログをみたりしなければいけないのがめんどくさいし、 もう1回起動してみるにも『Already loaded』となって起動できなくてめんどうなので、 再起動する前に、あらかじめlaunchdのフロントエンドであるlaunchctlコマンドを利用してサービスを起動してみて、エラーがでないことを確認しておく。
% sudo launchctl load -w /Library/LaunchDaemons/local.mongrel.quaint.plist % ps aux | grep mongrel void 61 0.3 1.6 2464848 33352 ?? Ss 11:14AM 0:02.43 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby /usr/bin/mongrel_rails start -e production -p 3000 -P log/mongrel.3000.pid -c /Users/void/cms --user void --group staff void 273 0.0 0.0 2435036 528 s000 S+ 11:19AM 0:00.00 grep mongrel