cron 是 Unix/Linux 系統內建的排程工作管理器,按預定的時間表自動執行指令。一個 cron job 定義「什麼時間跑什麼指令」,系統背景的 cron daemon 負責到時間就執行。

概念位置

cron 在接手維運時是容易被忽略的隱藏工作——它不像 web 服務有明顯的入口,但可能負責資料庫備份、快取清除、報表產出、日誌清理等關鍵任務。漏掉一個 cron job 可能讓備份停止、快取永不過期、報表不再更新,而且不會立刻有人發現。

crontab 格式

1# 分 時 日 月 週  指令
20  3  *  *  *    /usr/bin/php /var/www/backup.php
3*/5 * *  *  *    /usr/bin/curl -s https://example.com/cron/heartbeat
40  0  1  *  *    /usr/bin/find /tmp -mtime +7 -delete

五個時間欄位依序是分鐘(0-59)、小時(0-23)、日(1-31)、月(1-12)、星期幾(0-7,0 和 7 都是星期日)。* 代表「每一個」,*/5 代表「每 5 個」。

可觀察訊號

接手維運時盤點 cron job:

 1# 當前使用者的 crontab
 2crontab -l
 3
 4# 所有使用者的 crontab(需要 root)
 5for user in $(cut -f1 -d: /etc/passwd); do
 6  crontab -u "$user" -l 2>/dev/null && echo "=== $user ==="
 7done
 8
 9# 系統級 cron
10cat /etc/crontab
11ls /etc/cron.d/

沒有 SSH 時(cPanel 環境),在 cPanel 的「Cron 工作」頁面查看和匯出。

設計責任

cron job 要決定:排程頻率、執行失敗時的通知方式(cron 預設把輸出寄 email,但 email 常沒配好)、日誌記錄(指令的 stdout/stderr 導到 log 檔)。遷移或升級時,cron job 要隨著遷移——忘了搬等於停掉排程但沒人知道。

雲端替代品:AWS CloudWatch Events / EventBridge、GCP Cloud Scheduler、Azure Logic Apps。這些服務提供 web UI 管理、失敗通知、執行歷史,但需要額外設定。

鄰卡

  • SSH — 盤點和管理 cron 需要 SSH 存取