7月
31

cron に別れを告げ launchd と共に過ごそう、今さら

Mac OS X では cron は launchd にキックされる扱いなので launchd マジお勧め、ということは知ってはいたのだけど、今まで Mac 側で cron っぽいことをやる必要がなかったのでスルーしていました。が NetBSD に別れを告げるにあたり、今まで NetBSD でやってたことは全部 Lion Server で同じようにやりたい。もちろん cron はそのまま動くのだけど、せっかく OS が変わるのだからその流儀に従おう、ということで今さら launchd を使うことにしました。

参考にしたのは下記のサイト。

thanks a lot!!

移行してみたのは相変わらずお世話になりっぱなしというかないと生活できないレベルの pkgsrc の更新。 crontab にはこんな感じ

30 5 * * 1-6 cd /usr/src/pkgsrc && cvs update -P -d > /dev/null 2>&1

で書いてますが、これを launchd 形式に書き直します。
ポイントとしては

  1. ユーザー権限で実行
  2. メールがウザいので stdout/stderr は /dev/null 送り

でしょうか。

ということで参考サイトを見ながら適当に xml を書いてみる、とこんな感じ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>jp.hyrule.flora.src.pkgsrc</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/cvs</string>
        <string>update</string>
        <string>-Pd</string>
    </array>
    <key>WorkingDirectory</key>
    <string>/Volumes/pkgsrc/src/pkgsrc</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>3</integer>
    </dict>
</dict>
</plist>

これを適当な名前(ラベルに準じて jp.hyrule.flora.src.pkgsrc.plist )で ~/Library/LaunchAgents/ に保存して

launchctl load ~/Library/LaunchAgents/jp.hyrule.flora.src.pkgsrc.plist

とやると登録完了。… launchd がきめ細かな設定ができるとはいえ cron の御手軽さも捨てがたいものはありますな(無理に lanuchd を使わなくてもいいだろうという話もある)
手間取ったところは

Program
If this key is missing, then the first element of the array of strings provided to the ProgramArguments will be used instead.

というあたり? Program はなんのために定義されているんだというか、 ProgramArguments の最初の要素がプログラム扱いというのは微妙に気持ち悪い。

で、これを登録して放置してたら /var/log/system.log に

Jul 29 03:09:55 flora jp.hyrule.flora.src.pkgsrc[87752]: cvs update: Updating .

とか表示されちゃって厭ん。何が悪いかってーとポイント 2 番目の /dev/null を忘れちゃったからなんですね。

ということでこんな感じに修正

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/
PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>jp.hyrule.flora.src.pkgsrc</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/bin/cvs</string>
                <string>update</string>
                <string>-Pd</string>
        </array>
        <key>WorkingDirectory</key>
        <string>/Volumes/pkgsrc/src/pkgsrc</string>
        <key>StartCalendarInterval</key>
        <dict>
                <key>Hour</key>
                <integer>3</integer>
        </dict>
        <key>StandardOutPath</key>
        <string>/dev/null</string> 
        <key>StandardErrorPath</key> 
        <string>/dev/null</string>
</dict>
</plist>

言うまでもなく赤字が変更部分。で system.log には吐かれなくなりました。

この StandardOutPath や StandardErrorPath で STDOUT や STDERR の吐き先を変えられるってのは syslogd 経由せずに好きなところにログっぽいものを書き出せるので、地味に便利かもしれない。

Related posts:

  1. まどかちゃんと launchd 考えてみりゃ当たり前だよな、と思うのだけど、ちょーハマったのでもしかしたら同じようにハマってる人の役に立つかもしれないのでメモ。  NetBSD では cron で @reboot /path/to/madoka4.2/ [...]...
  2. SpamAssassinの調教 メール環境を移行した結果、 spam フィルターを、 Mew がサポートしてるからという理由で使っていた bogofilter から SpamAssassin に移行したのです。が、特性の問題だと思うんだけど、そのままで [...]...
  3. Lion Server で syslogd AirMac Extreme のログを NetBSD の syslogd で受けていたので、それを Lion Server でもやりたい。...
  4. Lion(x86_64) で ruby19-migemo-0.40 Lion になって困ったことのひとつが /usr/pkg/etc/mk.conf に ABI=64 と書いていると、 ruby-18-base の build に失敗すること。素で...
  5. 続々さくらのVPS1.5GでFreeBSD++ さくらのVPS1.5Gは HDD も 20GB から 50GB に増えているのです。が、無事動き出した環境で確認すると goro@manaka:~$ zpool list...

1 Comment to “cron に別れを告げ launchd と共に過ごそう、今さら”

Post comment

Follow us on Twitter! Follow us on Twitter!
ついった

Find Me On

J league

ついった

  • 昨日の Nintendo Direct は iPhone の Ustream.app で開いて Air Play で Apple TV2 に飛ばしてテレビで見てました。「かがくのちからってすげー!」ってな感じだけど、 Apple TV2 単体で完結してほしいトコロでもある。 23 minutes ago
  • いや、俺は持ってたけど「ゲームギアの美しい液晶画面は子供たちに衝撃を持って受け入れられました」は嘘だろうよ(笑)。(一部の|特殊な)子供たちに、だったら許す(ぇー 37 minutes ago
  • そーいえば例の冷凍のファミチキを買ったんだけど、奥さんの研究の結果、油であげなくてもオーブンを 250 度にして 15 分焼くと、ほぼ店頭で買えるのと同じ味になることが判明。そして順調に増加する俺の体重(笑 1 hour ago
  • ふと、本屋の店頭に平積みされてる本のうち、一冊だけ数を減らして積んどくと売れてると誤解されて売り上げが上がるんじゃないか? とか思いついた。 4 hours ago
  • チャーミングを iPhone というか Retina 向けにエンコして見てみたけど、細かい分ウチの 32" なテレビで見るよりもキレイな気がした。 4 hours ago

Tag cloud

Jリーグ特命PR部

Jリーグ2010特命PR部員 ごろー