1.背景:想用定時任務(wù)執(zhí)行某個腳本然后實現(xiàn)定時發(fā)送釘釘機器人消息;
2.構(gòu)思:樓主是做Android開發(fā)的牲览,由于不太懂phyon腳本锥腻,便想著用java來構(gòu)建jar包并用shell腳本執(zhí)行嘱函,然后用系統(tǒng)自帶的定時任務(wù)執(zhí)行shell腳本
1.定時任務(wù)實現(xiàn)
查閱了資料蓉驹,發(fā)現(xiàn)mac下并沒有像Windows那樣直接創(chuàng)建定時任務(wù)的功能,不過還是有解決方案的搂橙,接下里主角launchctl登場歉提,
launchctl:launchctl是一個統(tǒng)一的服務(wù)管理框架,可以啟動、停止和管理守護進程苔巨、應(yīng)用程序版扩、進程和腳本等。launchctl是通過配置文件來指定執(zhí)行周期和任務(wù)的侄泽。mac下可把任務(wù)信息配置在plist上由launchctl讀取
1.1 編寫plist文件
launchctl 將根據(jù)這個plist文件的信息來啟動任務(wù)礁芦,plist文件中的關(guān)鍵字可以在 蘋果官方文檔 找到,值得注意的是 Label 對應(yīng)的值需要保證唯一性蔬顾,作為任務(wù)的唯一標示宴偿∠嫔樱可以使用如下命令來驗證plist格式的正確性(不代表命令有效):
$ plutil-lint /Users/denglibing/Library/LaunchAgents/com.dingroot.checkin.plist
這個是一個完整的 plist 文件:
```<?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.taojiji.tapd.plist</string>
<key>ProgramArguments</key>
<array>
<string>/Users/xiaozhuzhu/Library/LaunchAgents/tapd.sh</string>
</array>
<key>StandardErrorPath</key>
<string>/Users/xiaozhuzhu/Library/LaunchAgents/tapd/tapd.err</string>
<key>StandardOutPath</key>
<string>/Users/xiaozhuzhu/Library/LaunchAgents/tapd/run.log</string>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key>
<integer>15</integer>
<key>Minute</key>
<integer>30</integer>
<key>Weekday</key>
<integer>1</integer>
</dict>
<dict>
<key>Hour</key>
<integer>15</integer>
<key>Minute</key>
<integer>30</integer>
<key>Weekday</key>
<integer>2</integer>
</dict>
<dict>
<key>Hour</key>
<integer>15</integer>
<key>Minute</key>
<integer>30</integer>
<key>Weekday</key>
<integer>3</integer>
</dict>
<dict>
<key>Hour</key>
<integer>15</integer>
<key>Minute</key>
<integer>30</integer>
<key>Weekday</key>
<integer>4</integer>
</dict>
<dict>
<key>Hour</key>
<integer>15</integer>
<key>Minute</key>
<integer>30</integer>
<key>Weekday</key>
<integer>5</integer>
</dict>
</array>
</dict>
</plist>```