経緯:
- バックアップサーバ (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 件のコメント:
コメントを投稿