ラベル Mac の投稿を表示しています。 すべての投稿を表示
ラベル Mac の投稿を表示しています。 すべての投稿を表示

2008年12月2日火曜日

Mac OS Xでの定期的な処理 - launchdについて

Macでlaunchdを使うという話。

経緯:
  1. バックアップサーバ (Fedora Core 1 + Pentium-II 333MHzの骨董品。) のディスクが残り少なくなって来た。
  2. 社内を見回す。→I-O DATAのLANDISK (HDL-GT) が目につく。いつもはMac/Windowsクライアントにとってのお手軽NAS.
  3. LANDISKをバックアップサーバにマウントしようとするも、様々な要因で断念。
  4. 再度社内を見回す。→あまり使わなくなったPowerMac G5 (Leopard) が目につく。
  5. mount_afpでLANDISKをマウントする。
  6. バックアップサーバで動いていたバックアップスクリプトをPowerMacに持ってくる。
  7. そのスクリプト達を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されている様に見える。

以下の様な事が起きているのかなと推測。
  1. launchdがバックアップスクリプトを呼び出す。
  2. バックアップスクリプト中のmailコマンドが呼ばれる。
  3. mailコマンドは非同期に終了、バックアップスクリプトのプロセスに戻ってくる。
  4. バックアップスクリプトが終了、launchdのガーベージコレクタが、先に非同期に起動された、同じプロセスグループIDを持つsendmailも片付けちゃう。
  5. 結果、メールが送信されない。

さらに色々調べるとこんなページを発見。AppleのDarwin関連ドキュメントって実はしっかりしてたんだなあと感心。

Technical Note TN2083: Daemons and Agents

ここを読むと、概ね上の推測は外れてない事がわかる。書かれている通りplistに


<key>AbandonProcessGroup</key>

<true/>



を追加すると、mailは送信されるようになった!

が、system.logに上のStray process云々のエントリはまだ残ってる。なんじゃこりゃ。

一応動いてるからいいって事にしといていいのか?

…しばらく様子を見よう。

2008年7月9日水曜日

Xcodeでプロジェクトフォルダ外のファイルもSCM対象にする


Xcodeは、デフォルトではプロジェクトファイルが入っているフォルダ以下に含まれるファイルのみがSCMの対象となっている。

例えば、

Work/Lib/include
Work/Lib/src
Work/MyProjectFolder/MyProject.xcodeproj

というフォルダ構成だと、MyProjectFolder以下は最初からXcodeのUI内でSCM操作が可能だが、Lib以下は出来ない。

これは、project rootが適切に設定されていないために起こる現象で、上のケースでは、project rootをWorkに設定すれば、それ以下のファイル全てがSCM対象となる。

project rootの設定は、Xcodeでプロジェクトファイルの[情報を見る]を行い、ルート:[選択]ボタンをクリックして行う。

2008年7月8日火曜日

自分自身の事がしたい

Instrumentsによるコードのチューニングを試してみる。

今書いているOpenGLのコードの最適化を行うに当たって、OpenGL ProfilerとSamplerが一つのウィンドウ内で操作/確認出来るのは非常に便利。
ただ、サンプリング中にマウスが消える事があるのがちょっと気持ち悪い。

昨日は結局ほとんど一日ミーティングで潰れちゃったので、(最近そんなのばかり)今日はこっちに時間を割きたいものだ。自分自身のプロジェクトがいつも後回しという生活を、いい加減どうにかしないといけないな。