crontab 解譯器

使用人類可讀的文字和下一次運行時間來解析 cron 表達式。

免費線上 Crontab 和 Cron 表達式解譯器

像 0 */5 * * * 這樣的 Cron 表達式緊湊但神秘。 Dokall 將任何有效的 cron 表達式轉換為人類可讀的文字並顯示即將到來的運行時間,以便您可以在部署之前驗證計劃。

DevOps 工程師和後端開發人員使用此工具來仔細檢查計劃的作業、偵錯計時問題並為團隊記錄 cron 配置。

什麼是 Cron?

Cron 是類 Unix 操作系統中基於時間的任務調度器。它在預定時間自動運行命令或腳本——每分鐘、每天午夜、每週一上午 9 點,或你能表達的任何其他計劃。cron 守護進程在後台運行,每分鐘檢查一次計劃。

每個用户都有一個 crontab(cron 表)檔案,列出其計劃任務。系統級 cron 任務位於 /etc/crontab 和 /etc/cron.d/。cron 系統是服務器管理的基礎——它處理日誌輪轉、備份、數據庫維護、郵件報告、快取清理以及無數其他自動化任務。

Cron 表達式格式

標準 cron 表達式有五個以空格分隔的字段:分鐘(0–59)、小時(0–23)、日(1–31)、月(1–12)和星期(0–7,其中 0 和 7 都表示星期日)。

每個字段可以是具體值(5)、範圍(1–5)、列表(1,3,5)、步進(*/5),或星號(*)表示所有值。表達式 30 2 * * 1 表示「週一凌晨 2:30」。表達式 0 */4 * * * 表示「每第 4 個小時的第 0 分鐘」(午夜、凌晨 4 點、上午 8 點、中午、下午 4 點、晚上 8 點)。

某些 cron 實現(如 Quartz)會增加第六個字段表示秒,以及第七個字段表示年。AWS CloudWatch Events 和 GitHub Actions 使用略有不同的語法。本工具解析標準的 5 字段 Unix cron 表達式。

Cron 表達式中的特殊字符

星號(*)表示「每一個」。小時字段中的 * 表示每小時。星期字段中的 * 表示每天。

逗號(,)分隔列表值。星期字段中的 1,3,5 表示週一、週三和週五。

連字符(-)定義範圍。小時字段中的 9-17 表示從上午 9 點到下午 5 點的每個小時。

斜槓(/)定義步進。分鐘字段中的 */5 表示每第 5 分鐘(0、5、10、15…)。1-30/2 表示從 1 到 30 每隔 2 分鐘(1、3、5、7…)。

某些實現支持額外字符:L(月末最後一天)、W(最近工作日)、#(月第 n 個星期幾,例如 2#1 = 第一個週一),以及 ?(無特定值,在已指定另一個日期字段時使用)。

常用 Cron 計劃

每分鐘:* * * * * —— 適用於健康檢查和實時監控,但需考慮負載。

每 5 分鐘:*/5 * * * * —— 輪詢、快取更新和隊列處理的常用間隔。

每小時:0 * * * * —— 在每小時的第 0 分鐘運行。適合小時級報告和數據同步。

每天午夜:0 0 * * * —— 經典的每日任務,用於備份、日誌輪轉和報告。

每個工作日上午 9 點:0 9 * * 1-5 —— 週一至週五運行。常用於工作時間任務和每日通知。

每月第一天:0 0 1 * * —— 在 1 號午夜運行。適合月度計費、報告和清理。

每週日凌晨 2 點:0 2 * * 0 —— 每週維護窗口。選擇流量較低的時間。

Cron 最佳實踐

始終將輸出重定向到日誌檔案:*/5 * * * * /path/to/script.sh >> /var/log/myjob.log 2>&1。沒有重定向時,cron 會通過郵件發送輸出(或在未配置郵件時靜默丟棄),你會丟失調試資訊。

對命令和檔案使用絕對路徑。Cron 以最小環境運行——你的 PATH 可能不包含 /usr/local/bin 或交互式 shell 中使用的其他目錄。指定完整路徑,或在 crontab 頂部設定 PATH。

添加錯誤處理和鎖定。如果任務運行時間長於間隔,下一次調用會在第一次仍在運行時啓動。使用 flock 或 PID 檔案防止重疊:* * * * * flock -n /tmp/myjob.lock /path/to/script.sh。

部署前測試計劃。將 cron 表達式粘貼到本解釋器中,確認下次運行時間符合預期。常見錯誤是混淆日字段和星期字段。

監控你的 cron 任務。使用 cron 監控服務(Cronitor、Healthchecks.io),在計劃任務未運行或耗時過長時向你發出警報。

常見問題

cron 與 crontab 有什麼區別?
Cron 是執行計劃命令的守護進程(後台服務)。Crontab(cron 表)是定義計劃的配置檔案。crontab 命令也用於編輯該檔案:crontab -e 打開你的 crontab 進行編輯,crontab -l 列出當前條目,crontab -r 刪除所有條目。
如何讓 cron 任務每 5 分鐘運行一次?
使用表達式 */5 * * * * 後跟你的命令。分鐘字段中的 */5 表示「每第 5 分鐘」——任務在每小時的 :00、:05、:10、:15、:20、:25、:30、:35、:40、:45、:50 和 :55 運行。
cron 表達式中的 */5 是什麼意思?
斜槓(/)是步進值。*/5 表示「從最小值起每隔 5 個值」。在分鐘字段(範圍 0–59)中,*/5 展開為 0,5,10,15,20,25,30,35,40,45,50,55。在小時字段(範圍 0–23)中,*/5 展開為 0,5,10,15,20。也可以對範圍使用步進:1-30/5 表示從 1 到 30 每隔 5 分鐘。
如何編輯我的 crontab?
在終端運行 crontab -e。這會在預設文本編輯器(通常是 vi 或 nano)中打開你的 crontab 檔案。每行添加一個任務,格式為:分鐘 小時 日 月 星期 命令。保存並退出——cron 會立即生效。運行 crontab -l 驗證你的條目。
cron 能每秒運行一次任務嗎?
不能。標準 cron 的最小粒度是一分鐘。要每秒運行任務,需要其他方法:腳本中的循環(while true; do command; sleep 1; done)、帶 OnUnitActiveSec=1s 的 systemd 定時器,或進程監管程序。多數情況下,若需要亞分鐘調度,cron 並非合適的工具。
如果 cron 任務運行時間超過間隔會怎樣?
Cron 會無論如何啓動新實例——它不會檢查上次運行是否仍在進行。這可能導致重疊執行、資源爭用和數據損壞。用檔案鎖防止:flock -n /tmp/myjob.lock /path/to/script.sh。-n 標誌使 flock 在鎖被佔用時立即退出,從而跳過重疊運行。
如何調試失敗的 cron 任務?
首先檢查 cron 日誌:grep CRON /var/log/syslog(Ubuntu)或 /var/log/cron(CentOS)。將任務輸出重定向到檔案:* * * * * /path/to/script.sh >> /tmp/debug.log 2>&1。常見問題:錯誤的 PATH(使用絕對路徑)、權限錯誤(cron 用户可能與 shell 用户不同),以及缺少環境變量(cron 以最小環境運行)。