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

延伸閱讀