使用 crontab 排程自動化你的工作

如果你需要執行一些固定的指令
這時候你可以使用 crontab 來讓電腦固定執行這些工作喔!

首先我們來開始編輯我們的 crontab 內容

編輯

1
crontab -e

如果你是系統管理者要編輯其他使用者的 crontab 內容
要加上 -u 參數來指定使用者喔

1
crontab -u codingman -e

指令

這時候需要設定執行的時間與週期還有你的指令

1
2
3
4
5
6
7
# ┌───────────── 分鐘   (0 - 59)
# │ ┌─────────── 小時 (0 - 23)
# │ │ ┌───────── 日 (1 - 31)
# │ │ │ ┌─────── 月 (1 - 12)
# │ │ │ │ ┌───── 星期幾 (0 - 7,0 是週日,6 是週六,7 也是週日)
# │ │ │ │ │
# * * * * * /path/to/command

符號意義

接下來講解一下指令支援的符號意義

特殊字元
代表意義
*代表接受任意時刻,例如若在分鐘那一欄填入星號則代表 0 ~ 59 皆可
,分隔多個不同時間點。例如若要指定 2:00、5:00 與 8:00 三個時間點執行指令,就可以在第二欄填入 2,5,8
-代表一段時間區間,例如若在小時填入 7-9 就代表從 7 點到 9 點的意思,也就是等同於 7,8,9
*/nn 需要填入數字,這樣寫的意思就是「每隔 n 的單位」的意思,例如若在第一欄填入 */5 就代表每間隔五分鐘執行一次的意思,也可以寫成 0-59/5。

以下舉一些例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 每天早上 8 點 30 分執行
30 08 * * * /path/to/script.sh --p0 --p1

# 每週日下午 6 點 30 分執行
30 18 * * 0 /path/to/script.sh --p0 --p1

# 每年 6 月 10 日早上 8 點 30 分執行
30 08 10 06 * /path/to/script.sh --p0 --p1

# 每月 1 日、15 日、29 日晚上 9 點 30 分各執行一次
30 21 1,15,29 * * /path/to/script.sh --p0 --p1

# 每隔 10 分鐘執行一次
*/10 * * * * /path/to/script.sh --p0 --p1

# 從早上 9 點到下午 6 點,凡遇到整點就執行
00 09-18 * * * /path/to/script.sh --p0 --p1

你也可以在這裡直接寫寫看是不是你想要的效果
https://crontab.guru/

除錯

這裡也分享一下如何幫你的 crontab 除錯

1
20 7 * * * /path/to/script.sh > /tmp/script.log 2>&1

在這邊我們看到 script 的結果會被收集在 /tmp/script.log 裡面

而最後的 2>&1 則是可以在 scirpt 因為某些原因沒辦法執行的時候
收集到系統的錯誤訊息

選擇 Shell

在編輯 crontab 的時候,你可以透過以下指令來改變執行你的 script 的 shell

1
2
3
SHELL=/bin/sh

00 09-18 * * * /path/to/script.sh --p0 --p1

執行權限

最後提醒各位朋友
記得幫你的 script 加上執行權限

1
sudo chmod +x /path/to/script.sh

接著就可以迎接你的快樂美好人生 並沒有

也許你也會想看看