Unix Cron 表示式生成器

視覺化生成Cron表示式,輕鬆配置定時任務。支援分鐘、小時、日期、月份、星期等時間單位設定,自動生成標準Cron表示式。

Cron表示式構建器

步長
分鐘

生成結果

輸入現有的 Cron 表示式,自動設定對應的表單選項

未來執行時間

Cron 表示式說明

Cron 表示式格式


一、Cron 表示式的基本結構(附權威來源)

一個標準的 cron 表示式由 5 個時間欄位1 個命令欄位組成,其定義遵循 Unix 和 Linux 系統的通用規範。根據 IEEE Std 1003.1-2017(POSIX 標準)[1]Linux man 5 crontab 文件[2],其格式如下:

* * * * * command-to-execute
│ │ │ │ │
│ │ │ │ └── 星期幾 (0-7, 0和7均代表星期日)
│ │ │ └──── 月份 (1-12)
│ │ └────── 日期 (1-31)
│ └──────── 小時 (0-23)
└────────── 分鐘 (0-59)

權威說明

  1. POSIX 標準[1] 定義了 cron 的最小相容規範,要求至少支援 *,- 符號。
  2. Linux 系統中的 cron 實現(如 Cronie)擴充套件了更多功能,例如步長值 (/) 和特殊字串(@daily 等),具體可參考其官方文件[3]

二、時間欄位的符號規則

每個時間欄位支援以下特殊符號:

符號 說明 示例
* 匹配任意值 * 在分鐘欄位 = 每分鐘
, 指定多個值 1,3,5 = 第1、3、5分鐘
- 定義範圍 10-15 = 10到15分鐘
/ 步長(間隔週期) */5 在分鐘欄位 = 每5分鐘
? 僅用於日期和星期欄位,表示"不指定" 常用於避免衝突

現代 cron 實現(如 Vixie cron 及其衍生版本)支援更豐富的語法規則。根據 IBM Cron 參考文件[4]Cronie 專案 Wiki[3],以下符號被廣泛支援:

符號 說明 官方文件示例
L 月份最後一天(僅某些實現支援) 0 0 L * * = 每月最後一天執行[5]
W 最近工作日(如 15W 表示最接近15日的工作日) 參考 Quartz Scheduler 文件[6](常用於 Java 生態,部分 cron 相容)

三、預定義別名(@daily 等)的來源

@daily@weekly 等別名源自 Paul Vixie 開發的 cron 實現(1987 年釋出的 Vixie cron)[7],併成為現代 Linux 發行版(如 Debian、Red Hat)的預設支援功能。根據 Debian cron 手冊[8]

# 等價於 0 0 * * *
@daily /path/to/script

四、常見實現差異與注意事項

不同 cron 實現可能存在細微差異,需參考對應文件:

實現名稱 特點 官方資源連結
Cronie Red Hat 系預設 cron,支援 @ 快捷方式 Cronie GitHub
systemd 通過 .timer 單元替代 cron(推薦新系統使用) systemd.timer 手冊
fcron 支援更復雜語法(如 @yearly fcron 官網

五、推薦驗證工具與權威參考資料

  1. Crontab 手冊頁
    終端輸入 man 5 crontab 檢視完整語法,這是最直接的本地權威參考。

  2. Cron 表示式生成器

  3. 開源專案文件


六、總結

通過結合 POSIX 標準、Linux 手冊頁和主流實現(如 Cronie)的文件,使用者可以精準掌握 cron 表示式的核心邏輯。對於高階用法(如 LW),需注意不同實現的相容性,並優先參考官方資源。


參考資料

[1] POSIX Standard: Cron 定義
[2] Linux man 5 crontab 手冊頁
[3] Cronie 官方文件: GitHub Wiki
[4] IBM Cron 參考: Cron 格式說明
[5] Quartz Cron 語法: Quartz Scheduler Docs
[6] Vixie cron 歷史: Vixie cron 維基
[7] Debian cron 手冊: Debian CronHowto
[8] systemd.timer 手冊: systemd 官方文件
[9] Ubuntu Cron 指南: Ubuntu Cron 社群文件

常見問題解答 (FAQ)

什麼是 Cron 表示式?

Cron 表示式是一個由空格分隔的 5 個或 7 個欄位組成的字串,在類 Unix 作業系統中用來表示時間排程。它允許您將任務(如備份、定時指令碼或通知)安排在特定時間或按一定時間間隔自動執行。

標準模式和擴充套件模式有什麼區別?

標準模式使用 5 個欄位(分鐘、小時、日、月、星期),是 Linux/Unix crontab 的標準格式。擴充套件模式使用 7 個欄位,增加了開頭的“秒”和結尾的“年”。擴充套件模式常用於現代應用框架(如 Java 的 Quartz 或 Spring 任務排程)。

Cron 中的“?”符號代表什麼意思?

“?”符號代表“不指定值”。它只能用在“日”和“星期”欄位。當您需要指定其中一個欄位的具體值,但不在乎另一個欄位時,這個符號非常有用。例如,如果您希望任務在每月的 10 號執行,而不管那天是星期幾,您需要在“日”欄位填 10,在“星期”欄位填“?”以避免衝突。

我可以反向解析已有的 Cron 表示式嗎?

可以!您可以使用“反向解析”功能。只需將您已有的 Cron 表示式貼上到輸入框中,然後點選“解析表示式”,視覺化的配置面板會自動更新以反映該表示式的各項設定。