Mac中的定時任務利器:launchctl

launchctl是一個統一的服務管理框架,可以啟動、停止和管理守護進程、應用程序、進程和腳本等。
launchctl是通過配置文件來指定執行周期和任務的。

當然mac也可以像linux系統一樣,使用crontab命令來添加定時任務,這里就不贅述,具體可參見:OS X 添加定時任務

下面將手把手教你在mac上創建定時任務。(任務目標:每天晚上十點定時執行/Users/demo/helloworld.py的python程序)

1. 創建run.sh腳本

進入 helloworld.py程序所在目錄
cd /User/demo
創建run.sh腳本
vi run.sh
添加執行helloworld.py的命令

#!/bin/sh

# 記錄一下開始時間
echo `date` >> /Users/demo/log &&
# 進入helloworld.py程序所在目錄
cd /Users/demo &&
# 執行python腳本(注意前面要指定python運行環境/usr/bin/python,根據自己的情況改變)
/usr/bin/python helloworld.py
# 運行完成
echo 'finish' >> /Users/demo/log

:wq保存退出

注意,腳本要改成可執行的權限
chmod 777 run.sh

2. 編寫plist文件

launchctl 將根據plist文件的信息來啟動任務。
plist腳本一般存放在以下目錄:

  • /Library/LaunchDaemons -->只要系統啟動了,哪怕用戶不登陸系統也會被執行

  • /Library/LaunchAgents -->當用戶登陸系統后才會被執行

更多的plist存放目錄:

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

進入~/Library/LaunchAgents,創建一個plist文件com.demo.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>
  <!-- Label唯一的標識 -->
  <key>Label</key>
  <string>com.demo.plist</string>
  <!-- 指定要運行的腳本 -->
  <key>ProgramArguments</key>
  <array>
    <string>/Users/demo/run.sh</string>
  </array>
  <!-- 指定要運行的時間 -->
  <key>StartCalendarInterval</key>
  <dict>
        <key>Minute</key>
        <integer>00</integer>
        <key>Hour</key>
        <integer>22</integer>
  </dict>
<!-- 標準輸出文件 -->
<key>StandardOutPath</key>
<string>/Users/demo/run.log</string>
<!-- 標準錯誤輸出文件,錯誤日志 -->
<key>StandardErrorPath</key>
<string>/Users/demo/run.err</string>
</dict>
</plist>

3. 加載命令

launchctl load -w com.demo.plist
這樣任務就加載成功了。

更多的命令:

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

# 刪除任務
$ launchctl unload -w com.demo.plist

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

# 開始任務
$ launchctl start  com.demo.plist

# 結束任務
$ launchctl stop   com.demo.plist

如果任務唄修改了,那么必須先unload,然后重新load
start可以測試任務,這個是立即執行,不管時間到了沒有
執行start和unload前,任務必須先load過,否則報錯
stop可以停止任務

番外篇

plist支持兩種方式配置執行時間:
  • StartInterval: 指定腳本每間隔多長時間(單位:秒)執行一次;
  • StartCalendarInterval: 可以指定腳本在多少分鐘、小時、天、星期幾、月時間上執行,類似如crontab的中的設置,包含下面的 key:
Minute <integer>
The minute on which this job will be run.
Hour <integer>
The hour on which this job will be run.
Day <integer>
The day on which this job will be run.
Weekday <integer>
The weekday on which this job will be run (0 and 7 are Sunday).
Month <integer>
The month on which this job will be run.
plist部分參數說明:
  1. Label:對應的需要保證全局唯一性;
  2. Program:要運行的程序;
  3. ProgramArguments:命令語句
  4. StartCalendarInterval:運行的時間,單個時間點使用dict,多個時間點使用 array <dict>
  5. StartInterval:時間間隔,與StartCalendarInterval使用其一,單位為秒
  6. StandardInPath、StandardOutPath、StandardErrorPath:標準的輸入輸出錯誤文件,這里建議不要使用 .log 作為后綴,會打不開里面的信息。
  7. 定時啟動任務時,如果涉及到網絡,但是電腦處于睡眠狀態,是執行不了的,這個時候,可以定時的啟動屏幕就好了。

更多的參數參見:mac官方文檔

參考:

Mac執行定時任務之Launchctl

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容

  • 創建定時任務主要就是為了每天固定運行一下腳本之類的。比如cocoapods倉庫每天總是有新的第三方庫提交,那么po...
    齊滇大圣閱讀 6,616評論 1 9
  • 前言 一不小心寫成上下兩篇了.真是有些過意不去.畢竟,寫的太多就少了一部分讀者(少了一部分贊額). 之所以拆成上下...
    無與童比閱讀 5,889評論 8 81
  • 需求情景 我在Mac上有好幾個分散在各處的文件夾需要備份到移動硬盤上,而且最好是增量備份的方式以節約時間。[1]需...
    水哥叔叔閱讀 15,095評論 2 16
  • 親愛的芬蘭,是你的藍惹了我 ...
    張惜姿閱讀 620評論 0 3
  • 留給自己的,全部都擺在那里,沉沉的,又渾噩。一只海鷗似乎對此感興趣,窺伺著,徘徊不去。 “ 下來吧!都給你?!蔽覒c...
    謳真閱讀 110評論 0 2