Ubuntu:crontab 例行工作排程器

2022/01/06 2,208 2 作業系統 , 伺服器 , Linux , Ubuntu

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


▲ 精選圖片。

贊助廣告 ‧ Sponsor advertisements

留言區 / Comments

萌芽論壇