Cron 是一款類 Unix 的作業系統下基於時間的任務管理系統,使用者可以透過 Cron 在固定時間、日期、間隔下,運行定期的任務工作,舉例來說可以是命令和腳本,這功能在維護、備份都非常有用。Cron 這個詞來源於希臘語 chronos(χρόνος),原意是時間。
所謂的 crontab,是指任務時間表,裏頭存放的指令會被 crond 守護進程啟動,守護進程在後台運行,並每一分鐘檢查是否有定期的作業需要被執行,這類作業一般稱為 cron jobs。這次主要用 Ubuntu 來操作,但基本上 crontab 的操作在各 Linux 系統都大同小異。
如何查看與編輯 crontab?
在 Linux 系統中,每個使用者皆可以設定屬於自己的工作排程。注意!若權限不足請在前頭加上 sudo(若可用)。
# 查看當下使用者的 crontab
crontab -l
# 編輯當下使用者的 crontab
crontab -e
# 刪除當下使用者的 crontab(小心使用)
crontab -r
## 分隔線 ##
# 查看指定使用者的 crontab,-u 用來指定使用者
crontab -u username -l
# 編輯指定使用者的 crontab,-u 用來指定使用者
crontab -u username -e
# 刪除指定使用者的 crontab(小心使用)
crontab -u username -r
如何撰寫 crontab 語法?
語法上是一行一個任務,依序是分鐘、小時、日期、月份、星期、指令,若要使用多個指令,可以先寫成一個 shell 來做。另外注意一點,就是執行時間主要依照伺服器內部時間為主,因此需要先了解您伺服器的時間是在哪個時區,若是使用 UTC,在台灣時間每個零點要執行的工作就必須設置在 16:00 UTC,代表著 0:00 UTC+8。原則上最小排程單位為 1 分鐘。建議可以把 # 註解放入 crontab 好記憶相關撰寫語法,若轉寫錯誤,儲存時也不會讓你過,所以儲存前請務必檢查,如時間單位共五個,不多不少要剛剛好。
# crontab 撰寫語法
# * 星號(任何可接受時間,若填在即日期,則代表每個日期執行)
# , 逗號(分隔時間,若要指定 10 日、20 日與 30 日,則在日期處填 10,20,30)
# - 減號(時間區間,舉例來說在日期處填 10-12,代表指定 10 日到 12 日,等同於 10,11,12)
# */n 星號加斜線加數字(每隔n單位,若在日期處填 */2,代表每隔兩日)
# ┌── 分鐘(0 - 59,零分 - 五十九分)
# │ ┌── 小時(0 - 23,零點 - 二十三點)
# │ │ ┌── 日期(1 - 31,一日 - 三十一日)
# │ │ │ ┌─ 月份(1 - 12,一月 - 十二月)
# │ │ │ │ ┌─ 星期(0 - 6,週日 - 週六)
# │ │ │ │ │
# * * * * * 使用者(可選) 指令
撰寫 crontab 範例
# 每分鐘執行
*/1 * * * * sh /path/to/script.sh
# 每小時執行
0 * * * * sh /path/to/script.sh
# 每 12 小時執行
0 */12 * * * sh /path/to/script.sh
# 每天執行
0 0 * * * sh /path/to/script.sh
# 每週執行
0 0 * * 0
# 每月執行
0 0 1 * *
# 每年執行
0 0 1 1 *
# 每天上午 2 點 0 分執行
0 2 * * * sh /path/to/script.sh
# 每週一上午 0 點 0 分執行
0 0 * * 1 sh /path/to/script.sh
# 每月 1 日中午 12 點 0 分執行
0 12 1 * * sh /path/to/script.sh
# 每年 1 月 1 日下午 6 點 30 分執行
30 18 1 1 * sh /path/to/script.sh
人性化時間參數
這個用來取代五個時間參數,有以下幾項可使用:
@reboot
:每次開機執行。
@yearly
:每年執行,同等於 0 0 1 1 *。
@annually
:同等於 @yearly
。
@monthly
:每月執行,同等於 0 0 1 * *。
@weekly
:每週執行,同等於 0 0 * * 0。
@daily
:每天執行,同等於 0 0 * * *。
@midnight
:同等於 @daily
。
@hourly
:每小時執行,同等於 0 * * * *。
啟動、停止、重新啟動 Cron
# 啟動 Cron
service cron start
# 停止 Cron
service cron stop
# 重新啟動 Cron
service cron restart
▲ 精選圖片。
留言區 / Comments
萌芽論壇