crontab 是 UNIX 系統上週期性排程任務的任務排程器。其名字是 chronic table(週期性時間表)的縮寫。UNIX 系統上的每一個使用者都有其自己的 "crontab"。
編輯 crontab 檔案。
通過執行 crontab -e
,你可以開啟你登入的使用者的 crontab。下面的插圖顯示了我的 crontab 的內容。
如你所見,我在用 crontab 來自動化 home brew, npm 和 arcanist 的更新(Arcanist 是程式碼審查、專案計劃、程式碼託管套件:Phabricator 的一個命令列程式碼審查工具)。
左側的如 0 0 * * *
這樣的數字序列代表「每天 00:00 AM」。這些數字序列將設定右側命令的執行時間。你可以在 crontab.guru 獲得一個使用者友好的介面來設定這串數字。
右側的命令僅支援少部分環境變數。你可以想象一個沒有任何 *rc
檔案載入的 shell 環境,那就是 crontab 所擁有的。
因為被 crontab 執行的命令所擁有的是這樣的 shell 環境,連 PATH
變數也沒有被設定,所以你必須寫下要執行命令的完全路徑。
被 crontab 執行的命令可以是一個 UNIX 系統隨行的命令列命令,也可以是你自己編寫的一段指令碼。如果你要執行一個需要 root 許可權的系統命令,那麼你需要保證你要執行的命令在 sudoers 檔案裡面。如果你要在 crontab 中執行一個 shell 指令碼,那麼你需要使用 chmod +x 你指令碼的名字
來讓你的指令碼有執行許可權。
儲存 crontab 檔案
在不同的編輯器上,儲存 crontab 檔案的方法各不相同。在 VIM 中,你可以使用 :w⏎
來儲存。如果你在使用 macOS,那麼當你儲存完檔案後將會遇到下面這個對話方塊,你需要點選「OK」來讓你的系統接受你的修改。
通知郵件
每一次一個命令被 crontab 所執行,你都會得到一封郵件。你可以在命令列環境以 mail
命令檢視這封郵件。
然後每天你來到你的桌前,只需要開啟你的命令列終端,然後輸入 mail
,然後你就可以知道你哪些命令列軟體更新了。如你所見,今天我電腦上的 npm 更新了。
改變通知郵件目的地
預設下,每一個被 crontab 執行的命令都會傳送一封郵件給設定這個命令的使用者。但是你可以通過在 crontab 檔案的頂部加入如下一行來改變目的地的地址(輸入 crontab -e
開啟 crontab 檔案)。
MAILTO=your@emailaddress.com
複製程式碼
你也可以通過設定 MAILTO
為 ""
來關閉郵件通知。具體如下列程式碼所示:
MAILTO=""
複製程式碼
閱讀 crontab 的手冊
通過執行 man crontab
, 你可以檢視 crontab 的細節使用方法.
一些資源
我的 macOS 用 crontab 指令碼: WeZZard/com.wezzard.crontab.macos
我的開發用 crontab 指令碼: WeZZard/com.wezzard.crontab.dev
原文刊發於本人部落格(英文)
本文使用 OpenCC 進行繁簡轉換