使用 crontab 自動化命令列軟體的更新

WeZZard發表於2019-03-24

crontab 是 UNIX 系統上週期性排程任務的任務排程器。其名字是 chronic table(週期性時間表)的縮寫。UNIX 系統上的每一個使用者都有其自己的 "crontab"。

編輯 crontab 檔案。

通過執行 crontab -e,你可以開啟你登入的使用者的 crontab。下面的插圖顯示了我的 crontab 的內容。

crontab 的編輯器
crontab 的編輯器

如你所見,我在用 crontab 來自動化 home brew, npmarcanist 的更新(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」來讓你的系統接受你的修改。

macOS 的提示
macOS 的提示

通知郵件

每一次一個命令被 crontab 所執行,你都會得到一封郵件。你可以在命令列環境以 mail 命令檢視這封郵件。

crontab 郵件
crontab 郵件

然後每天你來到你的桌前,只需要開啟你的命令列終端,然後輸入 mail,然後你就可以知道你哪些命令列軟體更新了。如你所見,今天我電腦上的 npm 更新了。

crontab 郵件內容
crontab 郵件內容

改變通知郵件目的地

預設下,每一個被 crontab 執行的命令都會傳送一封郵件給設定這個命令的使用者。但是你可以通過在 crontab 檔案的頂部加入如下一行來改變目的地的地址(輸入 crontab -e 開啟 crontab 檔案)。

MAILTO=your@emailaddress.com
複製程式碼

你也可以通過設定 MAILTO"" 來關閉郵件通知。具體如下列程式碼所示:

MAILTO=""
複製程式碼

閱讀 crontab 的手冊

通過執行 man crontab, 你可以檢視 crontab 的細節使用方法.

crontab 手冊
crontab 手冊

一些資源

我的 macOS 用 crontab 指令碼: WeZZard/com.wezzard.crontab.macos

我的開發用 crontab 指令碼: WeZZard/com.wezzard.crontab.dev


原文刊發於本人部落格(英文)

本文使用 OpenCC 進行繁簡轉換

相關文章