Crontab 是 Linux 系統中最常用的排程工具,掌握其語法格式與特殊符號,能讓你輕鬆實現各種複雜的定時任務需求。本文整理了標準格式、欄位說明與豐富實戰範例,適合速查與入門。
基本語法格式
* * * * * command
分 時 日 月 周 命令
六大欄位詳細說明
| 欄位 | 意義 | 取值範圍 | 備註 |
| 1 | 分鐘 | 0-59 | 每分鐘用 * 或 */1 |
| 2 | 小時 | 0-23 | 0 代表午夜 0 點 |
| 3 | 日期 | 1-31 | |
| 4 | 月份 | 1-12 | |
| 5 | 星期 | 0-6 | 0 代表週日,7 也可表週日 |
| 6 | 命令 | 完整路徑 | 要執行的指令或腳本 |
特殊符號與進階用法
- *:任意值(每一單位)
- */n:間隔 n 單位(如
*/2 代表每 2 小時)
- a-b:範圍(如
6-12 代表 6 到 12 點)
- a,b,c:列舉(如
1,10,22 代表特定日期)
- a-b/n:範圍內間隔(如
6-12/3 代表 6 到 12 點每 3 小時)
實戰範例精選
| 排程表達式 | 執行時間說明 |
30 21 * * * /usr/local/etc/rc.d/lighttpd restart | 每晚 21:30 重啟服務 |
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart | 每月 1、10、22 號 04:45 重啟 |
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart | 每週六、週日 01:10 重啟 |
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart | 每天 18:00-23:00 每 30 分鐘重啟 |
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart | 每週六 23:00 重啟 |
* */1 * * * /usr/local/etc/rc.d/lighttpd restart | 每小時重啟一次 |
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart | 23 點到隔天 7 點,每小時重啟 |
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart | 每月 4 號與週一至週三 11:00 重啟 |
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart | 1 月 1 號 04:00 重啟 |
Crontab 常用管理指令
| 指令 | 功能 |
crontab -e | 編輯排程(預設 vi,可設 VISUAL 環境變數更換編輯器) |
crontab -l | 列出目前排程 |
crontab -r | 刪除目前排程 |
crontab file [-u user] | 用指定檔案取代目前排程 |
crontab -c dir | 指定 crontab 目錄 |
環境變數與注意事項
- Cron 執行環境僅有
USER、HOME、SHELL 三個環境變數,腳本中請使用絕對路徑
- 預設會將執行輸出郵件寄給使用者,若不想收信,在指令末尾加
>/dev/null 2>&1
- 範例:
20 0-23/2 * * * echo "haha" >/dev/null 2>&1(每兩小時執行且不發郵件)
更多實用範例
# 每天早上 7 點執行 /bin/ls
0 7 * * * /bin/ls
# 12 月內,每天 6-12 點每 3 小時備份
0 6-12/3 * 12 * /usr/bin/backup
# 週一至週五 17:00 寄信
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
# 每 2 小時輸出一次
20 0-23/2 * * * echo "haha"
# 每天 06:10
10 6 * * * date
# 每兩小時
0 */2 * * * date
# 23 點到 7 點每兩小時,加上 8 點
0 23-7/2,8 * * * date
熟練運用 Crontab 的彈性語法,能精準掌控任務執行時機,是 Linux 運維與開發的必備技能。