「ひとかじりのりんご」

へっぽこエンジニアの備忘録。こちらは旧ブログ。新しい方はこちら→「http://sbkro.github.io」

Launchdを使ってRedmineを自動起動してみた

今までRedmineをPassenger経由で使っていたんだけど、山ライオンにアップデートしてから上手く動かなくなったので、WEBrickを自動起動する方針に変更。OSXのサービス管理基盤である「Launchd」を使って、Mac起動時にRedmineを自動起動するまでの方法をメモ書きします。

Launchdって何?

Wikipediaによると、Unix系OSにおけるデーモン管理ツール(例えばinit.dなど)に置き換わるものと説明がありました。ソースを公開しているらしいけど、OSX以外ではあまり聞かないですね。

Redmine起動までの手順

Launchdを使ってプログラムを実行するためには、以下の作業を行う必要があります。

  1. プロパティリストの作成
  2. プロパティリストの格納
  3. プロパティリストのロード・実行

プロパティリストの作成

Launchdがプログラムを実行するためには、実行するプログラムのパスや実行タイミング等を知っている必要があります。まずは、それらの情報をプロパティリストに記述します。

プロパティリストは、XML形式となっています。テキストエディタでも編集可能ですが面倒です。Property List Editorを利用することをオススメします。Xcodeのメニューバーから「File」→「New」→「File」を選択し、ダイアログから「Property List」を選んでください。


f:id:sbkro:20120825111043p:plain

今回の要件(Mac起動時にRedmineを自動起動する)の場合、以下の設定のみで十分です。「Label」の値は、OS上でユニークである必要があります。また、ファイル名は、「[Labelの値].plist」にしておきましょう。


f:id:sbkro:20120825111443p:plain

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>jp.sbkro.redmine</string>
	<key>OnDemand</key>
	<false/>
	<key>ProgramArguments</key>
	<array>
		<string>/usr/local/redmine/redmine_home/script/server</string>
		<string>-e</string>
		<string>production</string>
	</array>
</dict>
</plist>

プロパティリストの格納

プロパティリストは、以下のフォルダに格納するのが一般的だそうです。今回は「~/Library/LaunchAgents」に格納しました。

~/Library/LaunchAgents
/Library/LaunchAgents
/Library/LaunchDaemons
/System/Library/LaunchAgents
/System/Library/LaunchDaemons

プロパティリストのロード・実行

最後に、作成したプロパティリストをLaunchdに登録する必要があります。Launchdの操作には、「launchctl」というコマンドラインツールを利用します。まずは、「ターミナル.app」を起動しましょう。

ターミナルから次のコマンドを実行します。

// プロパティリストの登録
$ launchctl load /Users/sbkro/Library/LaunchAgents/jp.sbkro.redmine.plist 
// プロパティリストに書かれた内容を実行
$ launchctl start jp.sbkro.redmine

「load」の引数は絶対パスで指定することに注意してください。また、「start」の引数は、プロパティリストの「Label」の値を指定します。

これでRedmineが起動されます。以下のコマンドを実行するとRedmineが表示されます。これ以降は、Macの再起動後に自動的にプロパティリストをロード・実行してくれるので、「launchctl」の操作は必要ありません。

$ open http://0.0.0.0:3000

まとめ

今回は、Redmineの自動起動というネタを利用して、Launchdの使い方を勉強してみました。XMLを書くのが非常に手間ですが、init.dやcron以上に柔軟な操作が出来るみたいです。機会があれば、調べてみたいと思います。

あと、OS標準でGUI提供しろよと言いたい。 > Appleさん

参考

動作環境