また、このQueueDirectoriesは、postfixのスプールのような本来の利用法以外にも使い道はある。リスト2は同じくシステムドメインに配置されているcom.vix.cron.plistだ。
<?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>com.vix.cron</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/cron</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/crontab</string>
</array>
<key>QueueDirectories</key>
<array>
<string>/var/cron/tabs</string>
</array>
</dict>
</plist>
このリスト2では、WatchPathsで/etc/crontabを、QueueDirectoriesで/var/cron/tabsディレクトリを監視するように指定されている。Tigerのインストール直後/etc/crontabには何の設定もされておらず*、/var/cron/tabsも空になっている。しかし、crontabファイルを編集したりcrontab(1)コマンドで/var/cron/tabs以下にユーザーごとのcrontabが登録されると、launchdはcronを起動し、それらの処理を任せる。こうすることで、従来からのUNIXユーザーや開発者がcrontabを使ったソフトウェアを使用しても何ら問題ないようにできている。xinetdについても同じような設定がなされており、/etc/xinetd.d/に設定ファイルを追加するだけで自動的にxinetdが起動するようになっている。
QueueDirectoriesを活用することで、launchdはこうした過去との互換性も維持しているのだ。
互換性が確保されているのは、QueueDirectoriesだけではない。/sbin/serviceというコマンドもそれに当たる。Mac OS Xの/sbin/serviceコマンドは、Linuxの/sbin/serviceと/sbin/chkconfigを足して2で割ったようなもので、バックグラウンドで動作するサービスの起動や終了を指示したり、サービスの一覧を表示するなどの機能を持つ。このコマンドの実態はシェルスクリプトで、xinetdの設定とLaunchDaemonsディレクトリの双方をチェックし、指定の動作を行う。Linuxから移行してきたユーザーにとっては、このコマンドはlaunchctlのようなコマンドよりも扱いやすいだろう。
launchctlは、launchdのフロントエンドとなるコマンドである。使い方は2つあり、その1つは引数なしにlaunchdを実行することだ。そうすると、「launch%」というプロンプトが表示される。ここで、表1にあるサブコマンドを入力すると、各種機能を対話的に操作できる。もう1つの利用法は、launchctlに続けてサブコマンドおよびその引数を指定し非対話的な操作を行うことだ(リスト3)。
if [ -f /Library/Preferences/com.apple.sharing.firewall.plist ]; then
/usr/libexec/FirewallTool
fi
# Load [ideally on demand] daemons
/usr/libexec/register_mach_bootstrap_servers /etc/mach_init.d
if [ "${SafeBoot}" = "-x" ]; then
launchctl load /System/Library/LaunchDaemons
else
launchctl load /Library/LaunchDaemons /System/Library/LaunchDaemon
SystemStarter ${VerboseFlag}
fi
/usr/sbin/update
なお、launchctlが接続するのは、実行したユーザーと同じuidで動作するlaunchdだ。つまり、PID 1のlaunchdと接続するには、root権限でlaunchctlを実行させなければならない。
アップグレードインストールをした場合場合はこの限りではない。
Copyright © ITmedia, Inc. All Rights Reserved.