crontab 是 Linux 系統內建的排程服務,讓使用者能以精確的時間表自動執行腳本或指令。無論是備份、日誌輪轉、監控掃描,皆離不開它。本文完整涵蓋指令語法、時間格式、實用範例與常見陷阱。
| 指令 | 功能 |
|---|---|
crontab -e | 編輯當前使用者排程(預設 vi,可設 VISUAL 環境變數) |
crontab -l | 列出當前排程 |
crontab -r | 刪除當前排程 |
crontab -u user file | 以 root 身分管理指定使用者排程 |
crontab file | 以檔案內容取代目前排程 |
分 時 日 月 週 指令
* * * * * command
| 欄位 | 範圍 | 特殊符號 | 說明 |
|---|---|---|---|
| 分 | 0-59 | * , - / | 每分鐘、列舉、範圍、間隔 |
| 時 | 0-23 | * , - / | 同上 |
| 日 | 1-31 | * , - / ? | ? 僅用於日/週互斥 |
| 月 | 1-12 | * , - / | 可用英文縮寫 jan,feb... |
| 週 | 0-7 | * , - / | 0 或 7 皆為週日,可用 mon,tue... |
*:每單位皆執行a-b:從 a 到 b*/n:每 n 單位間隔a,b,c:離散列舉| 需求 | 排程寫法 | 說明 |
|---|---|---|
每天 07:00 執行 /bin/ls | 0 7 * * * /bin/ls | 固定時間 |
| 12 月每天 06:00-12:00 每 3 小時備份 | 0 6-12/3 * 12 * /usr/bin/backup | 範圍+間隔 |
| 週一至週五 17:00 寄信 | 0 17 * * 1-5 mail -s "hi" user@domain < /tmp/maildata | 週期列舉 |
| 每 2 小時輸出一次 | 0 */2 * * * date | 間隔執行 |
| 每月 4 號及週一至三 11:00 | 0 11 4 * mon-wed date | 日+週複合 |
預設執行輸出會郵件通知使用者。若不需郵件,請在每行結尾加上:
> /dev/null 2>&1
範例:0 7 * * * /bin/ls > /dev/null 2>&1
source /etc/profile。chmod +x)。> /var/log/mytask.log 2>&1。date 或 echo 驗證時間觸發,再換上真實腳本。/etc/crontab 與 /etc/cron.d/ 需指定執行使用者欄位。熟練掌握「五顆星」時間語法與 crontab -e/l/r 三大指令,即能輕鬆自動化維運任務。記得:絕對路徑、靜默輸出、自帶日誌 是穩定排程的三寶。