[ SITE TOP ]

Mac OS X launchd(8) 覚書

この文章は、Mac OS X 10.4(Tiger) にて init と inetd のかわりに使われるようになった、launchd に関する覚書である。

正確性、最新性などは保証しない。そのような情報は Apple Developer Connection の System Startup Programming Topics を参照すること。

Startup と On-Demond

launchd からの起動には二種類ある。init 相当の Startup と、inetd 相当の On-Demond である。実際の使い方次第では違ったこともできそうだが、とりあえずはこの分け方で大体の場合は問題はないはずである。

一応参考までにあげておくと、Daemon (On-Demond)で起動できるプロセスには以下のような種類(設定)がある。

~/Library/LaunchAgents
Per-user agents provided by the user.
/Library/LaunchAgents
Per-user agents provided by the adminis-trator.
/Library/LaunchDaemons
System wide daemons provided by the admin-istrator.
/System/Library/LaunchAgents
Mac OS X Per-user agents.
/System/Library/LaunchDaemons
Mac OS X System wide daemons.

Startup Items のつくりかた

/System/Library/StartupItems 以下にディレクトリを作成し、そこに(最低)2つのファイルを置くだけ。

daemon foo をブート時に起動したいとすると、

  1. /System/Library/StartupItems/foo/ ディレクトリ(permission 0755)を作成
  2. /System/Library/StartupItems/foo/foo (permission 0755)を作成する。foo/foo は起動スクリプト。当然実効可能であること。
  3. /System/Library/StartupItems/foo/StartupParameters.plist (permission 0644)を作成する。ここに書いたものがメタ情報となる。

が必要。

Startup Item Executable のつくりかた

こんな風につくるだけ。

#!/bin/sh
. /etc/rc.common
#
# Your startup item code
#
RunService "$1"

Startup Item Properties のつくりかた

以下のようなパラメータを記述できる。XCode 付属の Property List Editor を使うと楽できるらしい。

Description (Type; String)
概要を適当に記述する。管理ツールで使われる。
Provides (Type: Array)
提供するサービス名を記述する。サービス名は、複数同じ機能を持つアイテムがあった場合の衝突を避けるために利用される。
Requires (Type: Array)
あらかじめ起動してある必要のあるサービス名を記述する。
Uses (Type: Array)
あらかじめ起動しておいたほうがいいサービス名を記述する。Requires との違いは、Requires は必ず起動してある必要があるが、Uses に指定したサービスは無くても一応起動は可能という点。推奨サービスといったところだろうか。
Messages (Type: Array)
多分、起動/終了時などに表示する文字列を指定する。

例えば、SNMP Serviceだとこんな感じ。

{
  Description     = "SNMP server";
  Provides        = ("SNMP");
  Requires        = ("Resolver");
  OrderPreference = "None";
  Messages =
  {
    start = "Starting SNMP service";
    stop  = "Stopping SNMP service";
  };
}

Startup Items の使い方

起動時以外にも、/sbin/SystemStarter で色々できる。詳しくは SystemStarter(8) を参照。

sudo /sbin/SystemStarter restart "foo" あたりはよく使うかもしれない。