創(chuàng)建定時(shí)任務(wù)主要就是為了每天固定運(yùn)行一下腳本之類的敌土。比如cocoapods
倉庫每天總是有新的第三方庫提交,那么pod update
的時(shí)候就會(huì)更新master分支推掸,所以我就需要每天定時(shí)更新master股淡,省得到時(shí)候再去pull master。
launchctl 定時(shí)任務(wù)
一般最常用的就是launchctl
這種定時(shí)方式了邀泉。它是通過plist配置的方式來實(shí)現(xiàn)定時(shí)任務(wù)的。
plist文件格式
上圖就是一個(gè)簡(jiǎn)單的定時(shí)任務(wù)的plist文件钝鸽。下面來簡(jiǎn)單說一下里面Key的意思汇恤。
Label(String)
任務(wù)名稱,建議和文件名一樣Program(String)
要定時(shí)執(zhí)行的腳本拔恰,絕對(duì)路徑ProgramArguments (Array)
要定時(shí)執(zhí)行的腳本和一些參數(shù)因谎,絕對(duì)路徑。如果上面的Program省略的話執(zhí)行的就是ProgramArguments
里的第一個(gè)元素颜懊。StandardErrorPath(String)
腳本執(zhí)行錯(cuò)誤時(shí)的輸出日志蓝角,絕對(duì)路徑StandardOutPath(String)
腳本輸出的內(nèi)容阱穗,絕對(duì)路徑StartCalendarInterval(Dictionary)
腳本運(yùn)行的時(shí)間。Minute, Hour, Day, Month, Weekday使鹅。StartInterval(Number)
間隔運(yùn)行的時(shí)間揪阶,單位為秒。Disabled(Boolean)
是否不可用患朱,默認(rèn)為NO可用鲁僚。LimitLoadToSessionType(String)
限制訪問的類型。AQUA:一個(gè)GUI劑裁厅,即限制訪問所有GUI服務(wù)冰沙。這個(gè)Key好像沒什么用,可用不填执虹。RunAtLoad(Boolean)
標(biāo)識(shí)launchd在加載完該項(xiàng)服務(wù)之后立即啟動(dòng)路徑指定的可執(zhí)行文件拓挥。默認(rèn)值為false。KeepAlive(Boolean)
這個(gè)key值是用來控制可執(zhí)行文件是持續(xù)運(yùn)行呢袋励,還是滿足具體條件之后再啟動(dòng)侥啤。默認(rèn)值為false,也就是說滿足具體條件之后才啟動(dòng)茬故。當(dāng)設(shè)置值為ture時(shí)盖灸,表明無條件的開啟可執(zhí)行文件,并使之保持在整個(gè)系統(tǒng)運(yùn)行周期內(nèi)磺芭。
plist文件放置處
- ~/Library/LaunchAgents 由用戶自己定義的任務(wù)項(xiàng)(推薦)
- /Library/LaunchAgents 由管理員為用戶定義的任務(wù)項(xiàng)
- /Library/LaunchDaemons 由管理員定義的守護(hù)進(jìn)程任務(wù)項(xiàng)
- /System/Library/LaunchAgents 由Mac OS X為用戶定義的任務(wù)項(xiàng)
- /System/Library/LaunchDaemons 由Mac OS X定義的守護(hù)進(jìn)程任務(wù)項(xiàng)
建議放在 ~/Library/LaunchAgents 下面赁炎。
下面再來理解幾個(gè)基礎(chǔ)概念:
/System/Library和/Library和~/Library目錄的區(qū)別?
/System/Library目錄是存放Apple自己開發(fā)的軟件钾腺。
/Library目錄是系統(tǒng)管理員存放的第三方軟件徙垫。
~/Library/是用戶自己存放的第三方軟件。
LaunchDaemons和LaunchAgents的區(qū)別放棒?
LaunchDaemons是用戶未登陸前就啟動(dòng)的服務(wù)(守護(hù)進(jìn)程)姻报。
LaunchAgents是用戶登陸后啟動(dòng)的服務(wù)(守護(hù)進(jìn)程)。
launchctl 命令
添加: launchctl load /System/Library/LaunchAgents/com.test.plist
移除: launchctl unload /System/Library/LaunchAgents/com.test.plist
查看: launchctl list
立即執(zhí)行任務(wù):launchctl start com.aigo.launchctl.plist
停止執(zhí)行任務(wù):launchctl stop com.aigo.launchctl.plist
注意:
- 你所運(yùn)行的腳本需要有權(quán)限才能執(zhí)行:
chmod a+x test.sh
- 要讓任務(wù)生效哨查,必須先load命令加載這個(gè)plist
- 如果任務(wù)被修改了,那么必須先unload剧辐,然后重新load
- start可以測(cè)試任務(wù)寒亥,這個(gè)是立即執(zhí)行,不管時(shí)間到了沒有
- 執(zhí)行start和unload前荧关,任務(wù)必須先load過溉奕,否則報(bào)錯(cuò)
- ProgramArguments內(nèi)不能直接寫命令,只能通過shell腳本來執(zhí)行
launchctl的GUI工具
LaunchControl忍啤,用這個(gè)工具可以查看到所有的launchctl定時(shí)任務(wù)加勤。并用GUI的方式進(jìn)行修改執(zhí)行等仙辟。
參考
OSX系統(tǒng)添加定時(shí)任務(wù)
Mac OSX的開機(jī)啟動(dòng)配置
Mac上,執(zhí)行定時(shí)任務(wù):launchctl