Mac執行定時任務之Launchctl

2021-08-03 11:27:27 字數 2870 閱讀 2655

launchctl是乙個統一的服務管理框架,啟動、停止和管理守護程序、應用程式、程序和指令碼。下面講述一下如何在mac上使用launchctl執行定時任務。

一、編寫乙個plist檔案
$ plutil-lint /users/denglibing/library/launchagents/com

.denglibing

.checkin

.plist

這個是乙個完整的 plist 檔案:

<?xml version="1.0" encoding="utf-8"?>

version="1.0">

labelkey>

com.denglibing.checkinstring>

runatloadkey>

programargumentskey>

/users/denglibing/desktop/denglibing_checkin/denglibing_checkin_request.shstring>

array>

startcalendarintervalkey>

weekdaykey>

1integer>

hourkey>

8integer>

minutekey>

58string>

dict>

weekdaykey>

2integer>

hourkey>

8integer>

minutekey>

52string>

dict>

array>

standardoutpathkey>

/users/denglibing/desktop/denglibing_checkin/outlogstring>

standarderrorpathkey>

/users/denglibing/desktop/denglibing_checkin/errorlogstring>

dict>

plist>

二、編寫定時指令碼

即上面plist文件中的denglibing_checkin_request.sh指令碼,以最簡單的為例 (開啟指令碼):

# denglibing_checkin_request.sh

$ open /users/denglibing/desktop/denglibing_checkin/denglibing_checkin_request.sh

值得注意的是,需要設定這個指令碼為可執行檔案:

$ chmod a+x /users/denglibing/desktop/denglibing_checkin/denglibing_checkin_request.sh
三、plist檔案的位置
* ~/library/

launchagents 由使用者自己定義的任務項

* /library/

launchagents 由管理員為使用者定義的任務項

* /library/

launchdaemons 由管理員定義的守護程序任務項

* /system/

library/launchagents 由mac

osx為使用者定義的任務項

* /system/

library/launchdaemons 由mac

osx定義的守護程序任務項

建議放在 ~/library/launchagents 下面。

/system/library和/library和~/library目錄的區別?

/library目錄是系統管理員存放的第三方軟體。

~/library/是使用者自己存放的第三方軟體。

launchdaemons和launchagents的區別?

launchdaemons是使用者未登陸前就啟動的服務(守護程序)。

launchagents是使用者登陸後啟動的服務(守護程序)。

四、載入命令
# 載入任務, -w選項會將plist檔案中無效的key覆蓋掉,建議加上

$ launchctl load -w com.denglibing.checkin.plist

# 刪除任務

$ launchctl unload -w com.denglibing.checkin.plist

# 檢視任務列表, 使用 grep '任務部分名字' 過濾

$ launchctl list | grep 'com.denglibing'

五、總結

launchctl在定時啟動任務非常簡單和方便,值得注意的地方就是 plist 檔案了。

1、label:對應的需要保證全域性唯一性;

2、program:要執行的程式;

3、programarguments:命令語句

4、startcalendarinterval:執行的時間,單個時間點使用dict,多個時間點使用 array

5、startinterval:時間間隔,與startcalendarinterval使用其一,單位為秒

6、standardinpath、standardoutpath、standarderrorpath:標準的輸入輸出錯誤檔案,這裡建議不要使用 .log 作為字尾,會打不開裡面的資訊。

7、定時啟動任務時,如果涉及到網路,但是電腦處於睡眠狀態,是執行不了的,這個時候,可以定時的啟動螢幕就好了。

六、相關鏈結

mac上,執行定時任務:launchctl

多個時間點啟動任務

Mac 執行定時任務

在macos下,輸入 sudo crontab e crontab l 檢視定時任務 crontab r 刪除定時任務 有人曾碰到在mac os下無法使用定時任務crontab 解決方法 sudo vim vimrc 新增如下內容並儲存 autocmd filetype crontab setloc...

ORACLE執行定時任務

這pl sql中,進入command介面,執行如下語句即可 var job num number begin dbms job.submit job num,sp test sysdate,sysdate 1 24 60 60 true end 貌似時間間隔最少是5秒。引數說明 job num 返回...

python執行定時任務

一,當你想讓你某個方法在幾秒甚至更長的時間內執行後執行一次,你可以這樣做 import time from threading import timer defprint time enter time print now is time.time enter the box time is ent...