Mac 開機自啟動配置設置方法(定時任務解決方案)


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

  plist腳本存放路徑為/Library/LaunchDaemons或/Library/LaunchAgents,其區別是后一個路徑的腳本當用戶登陸系統后才會被執行,前一個只要系統啟動了,哪怕用戶不登陸系統也會被執行。可以通過兩種方式來設置腳本的執行時間。一個是使用StartInterval,它指定腳本每間隔多長時間(單位:秒)執行一次;另外一個使用StartCalendarInterval,它可以指定腳本在多少分鍾、小時、天、星期幾、月時間上執行,類似如crontab的中的設置。

一個簡單例子如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 3 <plist version="1.0">
 4 <dict>
 5     <key>Label</key>
 6     <string>com.yangyz.cron.test.plist</string>
 7     <key>ProgramArguments</key>
 8     <array>
 9         <string>/Users/yangyz/plist-test.sh</string>
10     </array>
11     <key>KeepAlive</key>
12     <false/>
13     <key>RunAtLoad</key>
14     <true/>
15     <key>StartInterval</key>
16     <integer>60</integer>
17 </dict>
18 </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修改一下即可。

參考資料:
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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM