2007-03-24

launchdの研究

Mac OS X 10.4から導入されたLaunchd、BINDの起動設定をする前にいろいろとつついてみることにする。

まず、lanunchctlの動作から。

管理ユーザmeでlaunchctl listを実行。

$ launchctl list
$
どうやら、ユーザmeは管理権限はあるけれどもrootではないので、あくまでmeのリストを見るようだ。
気を取り直して
$ sudo launchctl list
Password:
com.apple.dashboard.advisory.fetch
com.apple.KernelEventAgent
com.apple.mDNSResponder
com.apple.nibindd
com.apple.periodic-daily
com.apple.periodic-monthly
com.apple.periodic-weekly
com.apple.portmap
com.apple.syslogd
com.vix.cron
org.postfix.master
org.xinetd.xinetd
com.openssh.sshd
まだBIND(org.isc.named.plist)は読み込まれていない。
ここでlaunchctl startをかけるとどうなるか。
$ sudo launchctl start org.isc.named
launchctl start error: No such process
loadしていないデーモンはstartなどの操作を受け付けないようだ。
次に、namedが起動しない(設定ファイルに不備がある)状態でlaunchdに登録してみる。
#loadサブコマンドの -w は、loadの際に設定ファイルのdisabledキーをfalseに変更して上書きするオプション
$ sudo launchctl load -w /System/Library/LaunchDaemons/org.isc.named.plist
$ sudo launchctl list
com.apple.dashboard.advisory.fetch
(略)
org.isc.named

loadした時点で、すぐに起動を試みるようだ。おそらく、org.isc.named.plistの定義で<key>OnDemand<key>が<false/>だからだろう。
以下、ログ。
/var/log/system.log:
Mar 24 21:27:56 pba sudo: localadmin : TTY=ttyp0 ; PWD=/Users/me ; USER=root ; COMMAND=/bin/launchctl load -w /System/Library/LaunchDaemons/org.isc.named.plist
Mar 24 21:27:57 pba named[227]: starting BIND 9.3.2 -f
Mar 24 21:27:57 pba named[227]: /private/etc/named.conf:4: open: /etc/rndc.key: file not found
Mar 24 21:27:57 pba named[227]: loading configuration: file not found
Mar 24 21:27:57 pba named[227]: exiting (due to fatal error)
Mar 24 21:27:57 pba launchd: org.isc.named: exited with exit code: 1
Mar 24 21:27:57 pba launchd: org.isc.named: respawning too quickly! throttling
Mar 24 21:27:57 pba launchd: org.isc.named: 9 more failures without living at least 60 seconds will cause job removal
Mar 24 21:27:57 pba launchd: org.isc.named: will restart in 10 seconds
Mar 24 21:28:07 pba named[228]: starting BIND 9.3.2 -f
[snip]
Mar 24 21:29:17 pba launchd: org.isc.named: 1 more failure without living at least 60 seconds will cause job removal
Mar 24 21:29:17 pba launchd: org.isc.named: will restart in 10 seconds
Mar 24 21:29:27 pba named[237]: starting BIND 9.3.2 -f
Mar 24 21:29:27 pba named[237]: /private/etc/named.conf:4: open: /etc/rndc.key: file not found
Mar 24 21:29:27 pba named[237]: loading configuration: file not found
Mar 24 21:29:27 pba named[237]: exiting (due to fatal error)
Mar 24 21:29:27 pba launchd: org.isc.named: exited with exit code: 1
Mar 24 21:29:27 pba launchd: org.isc.named: respawning too quickly! throttling
Mar 24 21:29:27 pba launchd: org.isc.named: too many failures in succession

console.logはnamedのログのみ。
/Library/Logs/console/501/console.log:
Mar 24 21:27:57 pba named[227]: /private/etc/named.conf:4: open: /etc/rndc.key: file not found
Mar 24 21:27:57 pba named[227]: loading configuration: file not found
Mar 24 21:27:57 pba named[227]: exiting (due to fatal error)
[snip:あと9回繰り返し]
Mar 24 21:29:27 pba named[237]: exiting (due to fatal error)
10秒おきにリトライして10回失敗したらあきらめる様子。

このままでは不安なのでunload。が、予想外の反応が。
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.isc.named.plist
No such process(unloadしようにも、そんなのloadされてないね。)
sudo launchctl listしても、org.isc.named.plistの姿はない。
ファイル"/System/Library/LaunchDaemons/org.isc.named.plist"のDisalbeキーもtrueに書き戻されている。
どうやら10回挑戦してだめだった場合、自動的に"unload -w"されるようだ。

要するに


launchctl loadlaunchdへの登録。plistのDisabledがtrueであるならば、-wオプションをつけることでfalseに書き換えてくれる。
launchctl [ start | stop ]loadされているデーモンを開始/終了ただし、stopしても要求があれば起動する
launchctl unloadlaunchdへの登録削除。-wオプションはloadサブコマンドの際の逆。次の再起動かloadが行われるまで停止するなら -w 無しで、完全に無効にするなら -w をつけるという感じか。
launchctl listloadされているデーモンの一覧

という使い方らしい。(自信無し)

0 件のコメント: