shiden.com



shiden.com blog


Macでのサービス制御

 以前,DNSサーバでもちょこっと触れたけど,Mac OS X Leopard(10.5)のサービス制御はlaunchdなるものを使っている。あのあとPostgreSQLやSubversionを入れたのでこいつらのデーモンをOS起動と同時に動くよう設定することにした。

 サービス制御を行う場合,/Library/LaunchDaemons/ ディレクトリ以下にサービス制御を行うXMLファイルを書いてlaunchdに読み込ませればよい(OSが標準で定義するものは /System/Library/LaunchDaemons/ となるがこちらは原則変えない)。
 OSが標準で定義するXMLを参考に,手元のPostgreSQLの場合,次のようにした。

<?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>GroupName</key>
    <string>pgsql</string>
    <key>Label</key>
    <string>jp.shiden.PostgreSQL</string>
    <key>OnDemand</key>
    <false/>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/pgsql/bin/postgres</string>
        <string>-D</string>
        <string>/service/database</string>
        <string>-i</string>
    </array>
    <key>StandardErrorPath</key>
    <string>/dev/null</string>
    <key>StandardOutPath</key>
    <string>/dev/null</string>
    <key>UserName</key>
    <string>pgsql</string>
</dict>
</plist>

 この定義の場合,意味はおおむね次のかんじ。

  • サービス名称を"jp.shiden.PostgreSQL" とする(これは一意であればよいのでテキトー)
  • 起動ユーザ,グループを pgsql:pgsql とする
  • コマンドを "/usr/local/pgsql/bin/postgres -D /Users/pgsql/database -i" とする
  • 標準出力,エラーをいずれも /dev/null とする
  • launchctlでのロード時に起動までおこなう

 ちなみに,この設定ファイルを書くに当たってはまったのは次の2点。

  • pg_ctlで起動した場合,処理終了後pg_ctlプロセス自体はlaunchctlでエラーになってしまう
    (だからpostgresで起動するようにした)
  • OnDemandをfalseにしないと,自動起動しない
    (必要に応じてlaunchctl start ... で起動するという意味になってしまうから)

 とまぁ,試行錯誤(結構時間食った)を経て,無事必要なサービスが自動起動するようになりましたとさ。これでちょっとは使い勝手がよくなったかな。

トラックバック(0件)

このブログ記事を参照しているブログ一覧: Macでのサービス制御

このブログ記事に対するトラックバックURL: http://shiden.com/mt/mt-trackback-shiden.cgi/174

コメントする


画像の中に見える文字を入力してください。