使用 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 |
*/n | n 需要填入數字,這樣寫的意思就是「每隔 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 的 shell1
2
3SHELL=/bin/sh
00 09-18 * * * /path/to/script.sh --p0 --p1
執行權限
最後提醒各位朋友
記得幫你的 script 加上執行權限1
sudo chmod +x /path/to/script.sh
接著就可以迎接你的快樂美好人生 並沒有