mac os 定期任務配置

在linux下執行定期任務可以使用crontab,目前mac os也可以使用它,不過已不推薦使用。推薦做法是採用plist腳本,plist腳本可以設置執行的動作,時間間隔等其他一些信息。另外crontab的最小時間間隔是一分鐘,使用plist腳本原則上時間間隔可以爲一秒。

plist腳本存放路徑爲/Library/LaunchDaemons或/Library/LaunchAgents,其區別是後一個路徑的腳本當用戶登陸系統後纔會被執行,前一個只要系統啓動了,哪怕用戶不登陸系統也會被執行。

可以通過兩種方式來設置腳本的執行時間。一個是使用StartInterval,它指定腳本每間隔多長時間(單位:秒)執行一次;另外一個使用StartCalendarInterval,它可以指定腳本在多少分鐘、小時、天、星期幾、月時間上執行,類似如crontab的中的設置。

一個簡單例子如下:

<?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.yangyz.cron.test.plist</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/yangyz/plist-test.sh</string>
    </array>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>60</integer>
</dict>
</plist>

其中key是plist腳本定義的屬性,緊跟着的下一行是該屬性對應的值。上述腳本是每間隔60秒執行一次/Users/yangyz/plist-test.sh這個shell腳本,也可以使用StartCalendarInterval來替換StartInterval達到同樣的效果,例如:

<key>StartCalendarInterval</key>
<dict>
  <key>Minute</key>
  <integer>0</integer>
</dict>

上述設置的意思爲每天的每個小時的第0分鐘執行,也即使每60秒執行一次。

plist腳本中定義的屬性以及具體的含義,可以參看蘋果官方網站的說明,地址爲:launchd.plist(5) Mac OS X Manual Page

launchctl命令可以控制plist腳本停止或重新加載。例如:

停止腳本com.yangyz.cron.test.plist運行
launchctl unload /Library/LaunchDaemons/com.yangyz.cron.test.plist 

啓動腳本com.yangyz.cron.test.plist運行
launchctl load /Library/LaunchDaemons/com.yangyz.cron.test.plist

如果執行上面命令看到launchctl: Dubious ownership on file (skipping): /Library/LaunchDaemons/com.yangyz.cron.test.plist這樣的錯誤,其原因是該腳本的owner和當前執行操作用戶不一致。使用chown修改一下即可。

如果修改完用戶和所屬組以後,依然報“launchctl: Dubious ownership on file(skipping):/Library/LaunchDaemons/com.yangyz.cron.test.plist”這樣的錯誤,可以在修改一下plist文件的權限:"sudo chmod 644 /Library/LaunchDaemons/com.yangyz.cron.test.plist"後,再次啓動腳本。

參考資料:
http://www.devdaily.com/mac-os-x/launchd-plist-examples-startinterval-startcalendarinterval
http://www.devdaily.com/mac-os-x/mac-osx-startup-crontab-launchd-jobs

歡迎轉載,轉載請註明文章出處,謝謝!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章