crontab — 設定定時排程工作
設定、查看與管理 cron 定時排程任務。
語法
crontab [選項] [檔案]
常用選項
| 選項 | 說明 | 範例 |
|---|---|---|
-e |
開啟編輯器修改目前使用者的 crontab | crontab -e |
-l |
列出目前使用者的所有排程 | crontab -l |
-r |
刪除目前使用者的所有排程(謹慎!) | crontab -r |
-u 使用者 |
指定使用者(需要 root 權限) | sudo crontab -u alice -l |
使用範例
範例 1:cron 時間格式說明
crontab 每行的格式:「分 時 日 月 星期 指令」,* 代表每個。
$ # 格式:分 時 日 月 星期 指令
# │ │ │ │ │
# │ │ │ │ └── 星期(0=週日, 6=週六)
# │ │ │ └───── 月(1-12)
# │ │ └──────── 日(1-31)
# │ └─────────── 時(0-23)
# └────────────── 分(0-59)
範例 2:常見排程範例
實際常用的排程設定,加到 crontab -e 中。
$ # 每天凌晨 2 點執行備份
0 2 * * * /home/user/backup.sh
# 每 5 分鐘執行一次
*/5 * * * * /usr/local/bin/check-service.sh
# 每週一早上 8 點發送報告
0 8 * * 1 /usr/local/bin/weekly-report.sh
# 每月 1 日午夜清理日誌
0 0 1 * * find /var/log/myapp -mtime +30 -delete
範例 3:列出目前的排程
查看當前使用者的所有 cron 排程。
$ crontab -l
0 2 * * * /home/user/backup.sh
*/5 * * * * /usr/local/bin/check-service.sh
範例 4:使用特殊時間格式
cron 支援 @reboot、@daily、@weekly 等便捷語法。
$ @reboot /usr/local/bin/start-app.sh # 開機時執行
@daily /usr/local/bin/cleanup.sh # 每天執行(等同 0 0 * * *)
@hourly /usr/local/bin/check.sh # 每小時執行
常見錯誤與排錯
cron 排程未執行
- 原因
- 常見原因:cron 服務未啟動、腳本路徑錯誤、腳本沒有執行權限,或 PATH 環境變數與互動式 Shell 不同。
- 解法
- 1. 確認 cron 服務:systemctl status cron 2. 在腳本中使用絕對路徑 3. 在 crontab 開頭設定 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 4. 查看 cron 日誌:grep CRON /var/log/syslog