Cron 是 Linux 內建的時間基礎作業排程器。本文系統梳理系統級目錄 /etc/cron.*、使用者級 crontab 指令、時間排程語法、實戰 Demo 與常見除錯陷阱。
ls /etc/cron*
/etc/cron.hourly # 每小時執行 (第 17 分)
/etc/cron.daily # 每天執行 (06:25)
/etc/cron.weekly # 每週執行 (週日 06:47)
/etc/cron.monthly # 每月執行 (1 號 06:52)
/etc/cron.d # 自定義頻率 (腳本檔)
驅動邏輯在 /etc/crontab:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
run-parts 依字典序執行目錄下所有可執行檔anacron 確保關機錯過的排程在開機後補跑service cron start|stop|restart|reload
systemctl start|enable cron # systemd 系統
| 指令 | 功能 |
|---|---|
crontab -e | 編輯當前使用者排程 (建立 /var/spool/cron/username) |
crontab -l | 列出排程內容 |
crontab -r | 刪除所有排程 |
crontab -u user -e | root 編輯指定使用者排程 |
* * * * * 指令
分 時 日 月 週
0-59 0-23 1-31 1-12 0-7 (0/7=週日)
| 符號 | 含義 | 範例 |
|---|---|---|
* | 所有合法值 | * * * * * 每分鐘 |
/ | 步長 | */5 * * * * 每 5 分鐘 |
- | 範圍 | 8-18 * * * 8-18 點 |
, | 離散列舉 | 1,15,30 * * * * 第 1/15/30 分 |
*/1 * * * * /path/script.sh # 每分鐘
0 * * * * /path/script.sh # 每小時整點
0 0 * * * /path/script.sh # 每天午夜
0 0 * * 0 /path/script.sh # 每週日午夜
0 0 1 * * /path/script.sh # 每月 1 號午夜
0 0 1 1 * /path/script.sh # 每年 1/1 午夜
0 6 * * * /path/script.sh # 每天 06:00
0 */2 * * * /path/script.sh # 每 2 小時
0 23-7/2 * * * /path/script.sh # 23:00-07:00 每 2 小時
0 4 1 1 * /path/script.sh # 1/1 04:00
backupDemo.sh:
#!/bin/bash
VAR="https://www.example.com"
echo "$(date) $VAR"
exit 0
chmod +x backupDemo.shcrontab -e
*/1 * * * * /home/user/backupDemo.sh >> /home/user/log.log 2>&1
tail -f /home/user/log.logsystemctl status cron / ps aux | grep crongrep CRON /var/log/syslog (Debian/Ubuntu) 或 /var/log/cron (RHEL/CentOS)~/.bashrc),腳本內**務必使用絕對路徑**或開頭 source /etc/profile。@reboot 開機自動執行一次MAILTO="" 關閉郵件通知 (預設寄給擁有者)SHELL=/bin/bash 指定解釋器/etc/cron.d/ 檔案需包含使用者欄位:* * * * * user commandCron 簡單可靠,但「環境變數缺失、相對路徑、輸出無處可查」是三大坑。寫排程前先手動跑通、加絕對路徑、導向日誌,穩如磐石。