創(chuàng)建定時任務主要就是為了每天固定運行一下腳本之類的。比如cocoapods倉庫每天總是有新的第三方庫提交,那么pod update的時候就會更新master分支,所以我就需要每天定時更新master,省得到時候再去pull master。
launchctl 定時任務
一般最常用的就是launchctl這種定時方式了。它是通過plist配置的方式來實現定時任務的。
plist文件格式

上圖就是一個簡單的定時任務的plist文件。下面來簡單說一下里面Key的意思。
Label(String)
任務名稱,建議和文件名一樣Program(String)
要定時執(zhí)行的腳本,絕對路徑ProgramArguments (Array)
要定時執(zhí)行的腳本和一些參數,絕對路徑。如果上面的Program省略的話執(zhí)行的就是ProgramArguments里的第一個元素。StandardErrorPath(String)
腳本執(zhí)行錯誤時的輸出日志,絕對路徑StandardOutPath(String)
腳本輸出的內容,絕對路徑StartCalendarInterval(Dictionary)
腳本運行的時間。Minute, Hour, Day, Month, Weekday。StartInterval(Number)
間隔運行的時間,單位為秒。Disabled(Boolean)
是否不可用,默認為NO可用。LimitLoadToSessionType(String)
限制訪問的類型。AQUA:一個GUI劑,即限制訪問所有GUI服務。這個Key好像沒什么用,可用不填。RunAtLoad(Boolean)
標識launchd在加載完該項服務之后立即啟動路徑指定的可執(zhí)行文件。默認值為false。KeepAlive(Boolean)
這個key值是用來控制可執(zhí)行文件是持續(xù)運行呢,還是滿足具體條件之后再啟動。默認值為false,也就是說滿足具體條件之后才啟動。當設置值為ture時,表明無條件的開啟可執(zhí)行文件,并使之保持在整個系統(tǒng)運行周期內。
plist文件放置處
- ~/Library/LaunchAgents 由用戶自己定義的任務項(推薦)
- /Library/LaunchAgents 由管理員為用戶定義的任務項
- /Library/LaunchDaemons 由管理員定義的守護進程任務項
- /System/Library/LaunchAgents 由Mac OS X為用戶定義的任務項
- /System/Library/LaunchDaemons 由Mac OS X定義的守護進程任務項
建議放在 ~/Library/LaunchAgents 下面。
下面再來理解幾個基礎概念:
/System/Library和/Library和~/Library目錄的區(qū)別?
/System/Library目錄是存放Apple自己開發(fā)的軟件。
/Library目錄是系統(tǒng)管理員存放的第三方軟件。
~/Library/是用戶自己存放的第三方軟件。
LaunchDaemons和LaunchAgents的區(qū)別?
LaunchDaemons是用戶未登陸前就啟動的服務(守護進程)。
LaunchAgents是用戶登陸后啟動的服務(守護進程)。
launchctl 命令
添加: launchctl load /System/Library/LaunchAgents/com.test.plist
移除: launchctl unload /System/Library/LaunchAgents/com.test.plist
查看: launchctl list
立即執(zhí)行任務:launchctl start com.aigo.launchctl.plist
停止執(zhí)行任務:launchctl stop com.aigo.launchctl.plist
注意:
- 你所運行的腳本需要有權限才能執(zhí)行:
chmod a+x test.sh - 要讓任務生效,必須先load命令加載這個plist
- 如果任務被修改了,那么必須先unload,然后重新load
- start可以測試任務,這個是立即執(zhí)行,不管時間到了沒有
- 執(zhí)行start和unload前,任務必須先load過,否則報錯
- ProgramArguments內不能直接寫命令,只能通過shell腳本來執(zhí)行
launchctl的GUI工具
LaunchControl,用這個工具可以查看到所有的launchctl定時任務。并用GUI的方式進行修改執(zhí)行等。