Mac執(zhí)行定時任務(wù)之launchctl

Mac執(zhí)行定時任務(wù)之Launchctl

launchctl是一個統(tǒng)一的服務(wù)管理框架,啟動、停止和管理守護進程、應(yīng)用程序、進程和腳本。下面講述一下如何在Mac上使用launchctl執(zhí)行定時任務(wù)。

一、編寫一個plist文件

launchctl 將根據(jù)這個plist文件的信息來啟動任務(wù),plist文件中的關(guān)鍵字可以在 蘋果官方文檔 找到,值得注意的是 Label 對應(yīng)的值需要保證唯一性,作為任務(wù)的唯一標示??梢允褂萌缦旅顏眚炞Cplist格式的正確性(不代表命令有效):

$ plutil-lint /Users/denglibing/Library/LaunchAgents/com.denglibing.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.denglibing.checkin</string>
    <key>RunAtLoad</key>
    <true/>
    <key>ProgramArguments</key>
    <array> <string>/Users/denglibing/Desktop/denglibing_checkin/denglibing_checkin_request.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Weekday</key>
            <integer>1</integer>
            <key>Hour</key>
            <integer>8</integer>
            <key>Minute</key>
            <string>58</string>
        </dict>
        <dict>
            <key>Weekday</key>
            <integer>2</integer>
            <key>Hour</key>
            <integer>8</integer>
            <key>Minute</key>
            <string>52</string>
        </dict>
    </array>
    <key>StandardOutPath</key>
    <string>/Users/denglibing/Desktop/denglibing_checkin/outlog</string>
    <key>StandardErrorPath</key>
    <string>/Users/denglibing/Desktop/denglibing_checkin/errorlog</string>
</dict>
</plist>

二、編寫定時腳本

即上面plist文檔中的 denglibing_checkin_request.sh 腳本,以最簡單的為例 (打開腳本):

# denglibing_checkin_request.sh
$ open /Users/denglibing/Desktop/denglibing_checkin/denglibing_checkin_request.sh

值得注意的是,需要設(shè)置這個腳本為可執(zhí)行文件:

$ chmod a+x /Users/denglibing/Desktop/denglibing_checkin/denglibing_checkin_request.sh

三、plist文件的位置

* ~/Library/LaunchAgents 由用戶自己定義的任務(wù)項
* /Library/LaunchAgents 由管理員為用戶定義的任務(wù)項
* /Library/LaunchDaemons 由管理員定義的守護進程任務(wù)項
* /System/Library/LaunchAgents 由Mac OS X為用戶定義的任務(wù)項
* /System/Library/LaunchDaemons 由Mac OS X定義的守護進程任務(wù)項

建議放在 ~/Library/LaunchAgents 下面。

/System/Library和/Library和~/Library目錄的區(qū)別?
/System/Library目錄是存放Apple自己開發(fā)的軟件。
/Library目錄是系統(tǒng)管理員存放的第三方軟件。
~/Library/是用戶自己存放的第三方軟件。

LaunchDaemons和LaunchAgents的區(qū)別?
LaunchDaemons是用戶未登陸前就啟動的服務(wù)(守護進程)。
LaunchAgents是用戶登陸后啟動的服務(wù)(守護進程)。

四、加載命令

# 加載任務(wù), -w選項會將plist文件中無效的key覆蓋掉,建議加上
$ launchctl load -w com.denglibing.checkin.plist

# 刪除任務(wù)
$ launchctl unload -w com.denglibing.checkin.plist

# 查看任務(wù)列表, 使用 grep '任務(wù)部分名字' 過濾
$ launchctl list | grep 'com.denglibing'

五、總結(jié)

launchctl在定時啟動任務(wù)非常簡單和方便,值得注意的地方就是 plist 文件了。

1、Label:對應(yīng)的需要保證全局唯一性;
2、Program:要運行的程序;
3、ProgramArguments:命令語句
4、StartCalendarInterval:運行的時間,單個時間點使用dict,多個時間點使用 array <dict>
5、StartInterval:時間間隔,與StartCalendarInterval使用其一,單位為秒
6、StandardInPath、StandardOutPath、StandardErrorPath:標準的輸入輸出錯誤文件,這里建議不要使用 .log 作為后綴,會打不開里面的信息。
7、定時啟動任務(wù)時,如果涉及到網(wǎng)絡(luò),但是電腦處于睡眠狀態(tài),是執(zhí)行不了的,這個時候,可以定時的啟動屏幕就好了。

六、相關(guān)鏈接

Mac上,執(zhí)行定時任務(wù):launchctl

蘋果官方文檔:The Mac OS X launchd plist format | launchd plist file format (valid keys) | alvinalexander.com

多個時間點啟動任務(wù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,816評論 9 468
  • 創(chuàng)建定時任務(wù)主要就是為了每天固定運行一下腳本之類的。比如cocoapods倉庫每天總是有新的第三方庫提交,那么po...
    齊滇大圣閱讀 6,895評論 1 9
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,343評論 2 33
  • launchctl是一個統(tǒng)一的服務(wù)管理框架,可以啟動、停止和管理守護進程、應(yīng)用程序、進程和腳本等。launchct...
    繁著閱讀 59,247評論 8 47
  • 正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規(guī)則字符串...
    丨勿言閱讀 291評論 0 0

友情鏈接更多精彩內(nèi)容