Linux crontab 是 Linux 系統中最常用的排程工具,可以讓使用者指定特定時間自動執行命令或腳本,實現日常備份、日誌清理、例行維護等工作自動化。本文將從 crontab 指令、排程內容、欄位說明、實務案例到進階應用技巧全面介紹。
crontab 指令詳解
| 指令 | 用途 | 範例 |
|---|---|---|
crontab -e | 編輯當前使用者的 crontab 排程 | 新增或修改排程 |
crontab -l | 列出當前使用者排程 | 檢視所有排程 |
crontab -r | 刪除當前使用者排程 | 刪除所有排程 |
crontab -i | 刪除前提示確認 | crontab -i -r |
crontab -u 使用者 | 操作其他使用者排程(需 root 權限) | crontab -u jack -l |
crontab file.txt | 用指定檔案建立或覆蓋排程 | crontab backup.txt |
編輯排程內容
使用 crontab -e 編輯排程時,每行代表一個任務,格式如下:
MIN HOUR DOM MON DOW CMD
前五個欄位為時間欄位,第六個欄位開始是要執行的命令或腳本。
五欄位時間說明
| 欄位 | 意義 | 合法值 | 範例 |
|---|---|---|---|
| 分鐘 (MIN) | 指定分鐘 | 0–59 | 15(15 分鐘)、*/10(每 10 分鐘) |
| 小時 (HOUR) | 指定小時 | 0–23 | 2(凌晨 2 點)、*/4(每 4 小時) |
| 日 (DOM) | 指定日期 | 1–31 | 1(每月 1 號)、*/2(隔日) |
| 月 (MON) | 指定月份 | 1–12 | 1-6(1 月–6 月)、*(每月) |
| 星期 (DOW) | 指定星期 | 0–7(0、7 表示週日) | 1-5(週一到五)、0(週日) |
*任意合法值/步進值,如*/5每 5 分鐘-範圍值,如1-5,指定多個值,如1,15,30L、W、#進階特殊用法
實務範例
| 範例指令 | 說明 |
|---|---|
| 0 2 * * * /home/user/backup.sh | 每天凌晨 2 點執行自動備份。 |
| 30 1 * * 1 /home/user/weekly_report.sh | 每週一凌晨 1:30 生成報表。 |
| 0 0 1 * * /home/user/monthly.sh | 每月 1 號午夜執行月度任務。 |
| 15 14 1 * * /home/user/mail_send.sh | 每月 1 號 14:15 發送郵件。 |
| 0 */6 * * * /home/user/log_clean.sh | 每 6 小時清理日誌。 |
進階應用技巧
| 應用技巧 | 範例指令 | 說明 |
|---|---|---|
| 多任務同時執行 | 0 2 * * * /home/user/backup.sh && /home/user/log_clean.sh | 使用 && 連接多個命令,前一個成功才執行下一個。 |
| 步進與範圍設定 | */10 8-18 * * 1-5 /home/user/task.sh | 每週一到五,上午 8 點到 18 點,每 10 分鐘執行 task.sh。 |
| 指定環境變數 | 0 0 * * * PATH=/usr/local/bin:/usr/bin:/bin /home/user/script.sh | 設定執行環境的 PATH 或其他環境變數。 |
| 將輸出寫入日誌 | 0 1 * * * /home/user/script.sh >> /home/user/script.log 2>&1 | 將標準輸出與錯誤輸出都寫入 log 檔,方便除錯。 |
| 指定特定用戶執行 | 0 3 * * * root /home/user/backup.sh | 在 /etc/crontab 或系統排程中指定使用者,非自己身份也能執行。 |
| 條件執行(檢查檔案存在) | 0 4 * * * [ -f /home/user/file.txt ] && /home/user/script.sh | 先檢查檔案是否存在,存在才執行命令。 |
FAQ 常見問題
crontab 排程沒有執行怎麼辦?
先確認 cron 服務是否啟動,檢查指令路徑、腳本權限與使用者身份是否正確,可查看系統日誌 (/var/log/cron 或 /var/log/syslog)。
crontab 可以執行 Python 腳本嗎?
可以,只要指定完整 Python 路徑與腳本位置即可,如 /usr/bin/python3 /home/user/script.py,並確認執行權限。
如何查看目前排程?
使用 crontab -l 列出當前使用者排程,可搭配 grep 篩選特定任務。
如何刪除 crontab 排程?
使用 crontab -r 刪除所有使用者排程,建議先用 crontab -l > backup.txt 做備份。
如何設定每週或每月任務?
指定日期或星期欄位即可,例如每週五 * * * * 5。
如何排程多任務?
每行寫一個任務即可,cron 會逐行執行,也可使用腳本批次加入多個任務。
