瞭解 Launchd:
基本上 Launchd 是透過 *.plist 檔案得知有哪些東西需要管理,所以若要新增任務給 Launchd,我們要新增一個任務定義檔 ( 即 plist 檔案 ),該檔案描述程式名稱、所在位置、執行方式等等。為了方便使用者操作 Launchd,它提供了 Launchctl 工具讓我們可以即時對 Launchd 下達指令。而 Launchd 根據任務的層級規劃了不同的資料夾來存放任務定義檔,文件中對資料夾描述分別為:
~/Library/LaunchAgents Agents provided by the user.
/Library/LaunchAgents Agents provided by the administrator.
/Library/LaunchDaemons System daemons provided by the administrator.
/System/Library/LaunchAgents Agents provided by Apple.
/System/Library/LaunchDaemons System daemons provided by Apple.
對於使用者自訂的任務,幾乎不需要使用到 /System 開頭的資料夾,所以通常將任務定義檔放置其他的資料夾即可。
建立任務定義檔:
假設我需要在每天的 14:30 執行某個 Shell Script。首先,建立檔案 ( 檔名如:com.myname.launch.some.program.plist ),並定義內容:
建立好後將檔案放置於對應層級的資料夾即可,如範例這個 Script 只有我需要執行,則放置於 ~/Library/LaunchAgents。
使用 Launchctl:
任務內容設定好後,我們可以透過 Launchctl 將該任務載入 ( 讓 Launchd 知道有新的任務加入 ),指令:
# 載入任務
launchctl load ~/Library/LaunchAgents/com.myname.launch.some.program.plist
# 移除任務
launchctl unload ~/Library/LaunchAgents/com.myname.launch.some.program.plist
# 手動執行任務
launchctl start com.myname.launch.some.program
# 列出所有任務
launchctl list
需要注意的是,你可以藉由 launchctl list 這個指令看到任務的狀態 ( status 欄位 ),若出現非 0 的狀態碼代表任務發生錯誤,可以使用 launchctl error [錯誤碼] 來查詢。
Environment :
・ Mac OS X
Reference :
・ Launchd