経緯:
- バックアップサーバ (Fedora Core 1 + Pentium-II 333MHzの骨董品。) のディスクが残り少なくなって来た。
- 社内を見回す。→I-O DATAのLANDISK (HDL-GT) が目につく。いつもはMac/Windowsクライアントにとってのお手軽NAS.
- LANDISKをバックアップサーバにマウントしようとするも、様々な要因で断念。
- 再度社内を見回す。→あまり使わなくなったPowerMac G5 (Leopard) が目につく。
- mount_afpでLANDISKをマウントする。
- バックアップサーバで動いていたバックアップスクリプトをPowerMacに持ってくる。
- そのスクリプト達をcronジョブとして登録しようとすると…あれ??!
Mac OS Xにはcrond無いんですね。その様な用途にはlaunchdを使えとあります。
Getting Started with launchd
launchdにいろいろ仕事をさせるための設定ファイルはXML形式となっています。手で書くのもしんどいなと思って探していたら、こんな素敵なアプリを見つけました。
Lingon
これを使ってFedora Core 1で動かしていたバックアップスクリプト用のlaunchd.plistを作成しても、スクリプトの末尾にある以下の様なよくあるメール送信コマンドがうまく動きません。
$ echo <メール本文> | mail -s <メールSubject> <宛先アドレス>
system.logには以下の様なエントリが残っています。
08/12/02 15:48:55 com.apple.launchd[110] (<launchdラベル>[<プロセスID>]) Stray process with PGID equal to this dead job: PID 316 PPID 1 sendmail <ホスト名>:
バックアップスクリプトが終了した途端、mailコマンドから起動されるsendmailがkillされている様に見える。
以下の様な事が起きているのかなと推測。
- launchdがバックアップスクリプトを呼び出す。
- バックアップスクリプト中のmailコマンドが呼ばれる。
- mailコマンドは非同期に終了、バックアップスクリプトのプロセスに戻ってくる。
- バックアップスクリプトが終了、launchdのガーベージコレクタが、先に非同期に起動された、同じプロセスグループIDを持つsendmailも片付けちゃう。
- 結果、メールが送信されない。
さらに色々調べるとこんなページを発見。AppleのDarwin関連ドキュメントって実はしっかりしてたんだなあと感心。
Technical Note TN2083: Daemons and Agents
ここを読むと、概ね上の推測は外れてない事がわかる。書かれている通りplistに
<key>AbandonProcessGroup</key>
<true/>
を追加すると、mailは送信されるようになった!
が、system.logに上のStray process云々のエントリはまだ残ってる。なんじゃこりゃ。
一応動いてるからいいって事にしといていいのか?
…しばらく様子を見よう。
0 件のコメント:
コメントを投稿