用 Cron 排程你的指令稿

Bash 指令稿入門

Alex Scriven

Data Scientist

為什麼要排程指令稿?

 

在許多情況下,替指令稿設定排程很有用:

  1. 需要定期執行的任務,例如每天、每週,或一天多次。
    • 你可以設行事曆提醒,但要是忘了呢?
  2. 最佳化資源使用(清晨時段執行腳本)

cron 排程指令稿是現代資料基礎設施的必備技能。

Bash 指令稿入門

什麼是 cron?

 

Cron 自 70 年代起就是類 Unix 系統的一部分。人類偷懶已經那麼久了!

名稱來自希臘語中的時間一詞:chronos

它由稱為 crontab 的東西驅動。這個檔案包含多個 cronjobs,每個都告訴 crontab 要在什麼時候執行哪些程式碼。

Bash 指令稿入門

Crontab——cronjob 的驅動器

 

你可以用下列指令查看目前已設定的排程(cronjobs):

crontab -l
crontab: no crontab for user

看來我們需要先建立一個排程(cronjob)!

Bash 指令稿入門

Crontab 與 cronjob 結構

這張來自維基百科的圖片示範如何在 crontab 檔案中撰寫 cronjob。你可以有很多 cronjobs,一行一個。

Crontab 的結構

  • 共有 5 個星號可設定,各代表一個時間單位
  • 預設的 * 代表「每」
Bash 指令稿入門

Cronjob 範例

一起看幾個 cronjob 範例:

5 1 * * * bash myscript.sh

  • 分鐘為 5(每小時過 5 分)。小時為 1(淩晨 1 點之後)。後三個是 *,表示每天、每月。
    • 總結:每天 1:05 執行

 

15 14 * * 7 bash myscript.sh

  • 分鐘為 15(每小時過 15 分)。小時為 14(下午 2 點之後)。接著兩個是 *(每月的每天、每年的每月)。最後一位是第 7 天(星期日)。
    • 總結:每週日 2:15 執行。
Bash 指令稿入門

進階 cronjob 結構

如果你想一天執行多次,或每隔「X」時間執行,也辦得到:

  • 用逗號指定多個時間點,例如:
    • 15,30,45 * * * * 會在每小時的 15、30、45 分執行。第二個星號指定小時,這裡是每小時、每天等。
  • 用斜線表示「每 X 單位」,例如:
    • */15 * * * * 表示每 15 分鐘執行。同樣是每小時、每天等。
Bash 指令稿入門

你的第一個 cronjob

讓我們把 extract_data.sh 安排在每天清晨 1:30 執行。步驟如下:

  1. 在終端機輸入 crontab -e 編輯你的 cronjobs。
    • 可能會詢問要用哪個編輯器。nano 很好上手,比 vi(vim)學習曲線更平緩。
  2. 建立 cronjob:
    • 30 1 * * * extract_data.sh
Bash 指令稿入門

你的第一個 cron 作業

3. 離開編輯器並儲存

如果用的是 nano(在 Mac),請按 ctrl + o,接著 enter,再按 ctrl + x 離開。

你會看到訊息 crontab: installing new crontab

4. 執行 crontab -l 確認已加入。

30 1 * * * extract_data.sh

做得好!

Bash 指令稿入門

一起來練習吧!

Bash 指令稿入門

Preparing Video For Download...