« 跑不動的script | Home | WordPress及外掛的升級 »
從crond到launchd *舊文出清*
新裝好的OSX86大白機,也許是因為系統提升到10.5.5之故,比起舊的藍白10.4 Server,log裡常常會有這樣的訊息:
May 8 23:35:01 openbunny com.apple.launchd[1] (0x10d230.cron[789]): Could not setup Mach task special port 9: (os/kern) no access
May 8 23:35:01 openbunny com.apple.launchd[1] (0x10d430.cron[790]): Could not setup Mach task special port 9: (os/kern) no access
May 8 23:40:00 openbunny com.apple.launchd[1] (0x10d230.cron[868]): Could not setup Mach task special port 9: (os/kern) no access
May 8 23:40:00 openbunny com.apple.launchd[1] (0x10d430.cron[869]): Could not setup Mach task special port 9: (os/kern) no access
May 8 23:45:00 openbunny com.apple.launchd[1] (0x10d230.cron[939]): Could not setup Mach task special port 9: (os/kern) no access
紀錄的時間還滿有規律性的。cron job的執行並沒有異常,但是每次執行都會噴這樣一行,實在有點煩。根據這篇,這是crond噴出來的沒錯,只是原因不明。唯一的解法就是不要用crond來跑cron job,改用從10.4起Apple推獎的launchd來跑。
原本有在跑的3個cron job,在/etc/crontab裡也就是3行:
*/5 * * * * root scp /var/www/mrtg/192.168.10.100_2-day.png channinggao@solomini:~/Pictures/
*/2 * * * * root /usr/local/bin/top.sh
若是要移轉到lauchd的架構,則是要把每個job轉換成一個對應的plist檔。比方說mrtg的cron job就會變這樣:
<?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>com.channinggao.mrtg</string>
<key>ProgramArguments</key>
<array>
<string>env</string>
<string>LANG=C</string>
<string>/opt/local/bin/mrtg</string>
<string>/var/www/mrtg/cfg/mrtg.cfg</string>
<string>--logging</string>
<string>/var/log/mrtg.log</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>300</integer>
<key>UserName</key>
<string>root</string>
</dict>
</plist>
其實內容很容易懂,不過寫起來真的是囉哩巴唆;萬一弄錯一個符號或是語法有誤,launchd就會狂噴錯誤訊息:
May 8 23:59:17 openbunny com.apple.launchd[1] (com.channinggao.mrtg): Throttling respawn: Will start in 3 seconds
May 8 23:59:22 openbunny com.apple.launchd[1] (com.channinggao.mrtg): Throttling respawn: Will start in 8 seconds
May 8 23:59:27 openbunny com.apple.launchd[1] (com.channinggao.mrtg): Throttling respawn: Will start in 3 seconds
May 8 23:59:32 openbunny com.apple.launchd[1] (com.channinggao.mrtg): Throttling respawn: Will start in 8 seconds
幸好有人寫了Lingo這個好用的小工具,只要填一填、勾一勾就可以輕鬆搞定了。話雖如此,我之前漏掉了UserName這個必須在Expert Mode手動建立的key值,還是讓我卡關了一個小時。可惜的是Lingo只能產生plist檔,不會教launch重新載入更新的plist設定。如果不想在改好plist後登出登入或重開機,可以透過lauchctl這個指令:
$ sudo launchctl load com.channinggao.mrtg.plist
$ sudo launchctl start com.channinggao.mrtg




No comments
Jump to comment form | comments rss | trackback uri