Cron 表達式產生器
免費線上 Cron 表達式產生器:可視化設定排程,中文說明與下次執行時間即時預覽,台灣時間一鍵換成 GitHub Actions 的 UTC。
點選或直接輸入 5 個欄位(分 時 日 月 星期),下面立刻顯示中文說明與接下來的執行時間;「放到排程平台」會把台灣時間換成 GitHub Actions 用的 UTC,並產生 Kubernetes CronJob、Linux crontab 可直接貼上的設定。
Cron 表達式的 5 個欄位
由左到右是分、時、日、月、星期
┌──────── 分鐘(0-59)
│ ┌────── 小時(0-23)
│ │ ┌──── 日(1-31)
│ │ │ ┌── 月(1-12 或 JAN-DEC)
│ │ │ │ ┌ 星期(0-7,0 和 7 都是週日;或 SUN-SAT)
0 9 * * 1-5 ← 週一到週五 09:00- *:每一個值,例如小時寫 * 就是每小時。
- ,:列舉,例如 0,30 是第 0 與第 30 分。
- -:範圍,例如 1-5 是週一到週五。
- /:間隔,例如 */15 是每 15 分鐘;9-18/3 是 9 點到 18 點之間每 3 小時。
也接受 @yearly、@monthly、@weekly、@daily、@hourly 這幾個簡寫。@reboot(開機時執行)沒有固定時間,無法預覽。
常用排程怎麼寫
| 需求 | Cron 表達式 |
|---|---|
| 每 15 分鐘 | */15 * * * * |
| 每天凌晨 2 點 | 0 2 * * * |
| 週一到週五,9 點到 18 點每小時整點 | 0 9-18 * * 1-5 |
| 每月 1 日與 15 日中午 | 0 12 1,15 * * |
| 每季第一天午夜 | 0 0 1 1,4,7,10 * |
| 每週日晚上 11 點半 | 30 23 * * 0 |
時間都是執行平台的時區;放到 GitHub Actions 前記得換成 UTC。
最容易寫錯的三件事
- 日和星期同時指定是「或」:0 0 1 * 1 代表每月 1 日,以及每個週一,不是「剛好是週一的 1 日」。Linux 內建的 cron 就是這樣算,工具的中文說明與下次執行時間也照這個規則。
- */7 不是「每 7 天」:日欄位的 */7 是每月 1、8、15、22、29 日,到了下個月又從 1 日重新算;小時的 */5 也是每天從 0 點重算(0、5、10、15、20 點)。分鐘、小時的間隔除不盡時,工具會在中文說明後面標出來。
- 時區:表達式本身沒有時區,照執行它的機器或平台時區算。同一行 0 9 * * *,放在台灣的電腦是早上 9 點,放在 GitHub Actions 是台灣下午 5 點。
台灣時間換成 UTC(GitHub Actions)
GitHub Actions 的排程一律以 UTC 執行,台灣是 UTC+8,所以要把小時減 8。減完變成負的就跨到前一天:日與月都沒指定時,工具會把星期一起往前挪一天;有指定日期或月份又跨日(例如每月 1 日早上),一行 cron 寫不出來,工具會直接說明,不會給你一個看起來對、其實時間錯的表達式。
| 台灣時間 | GitHub Actions 要寫 | 說明 |
|---|---|---|
| 0 9 * * 1-5 | 0 1 * * 1-5 | 週一到週五 09:00,UTC 是同一天 01:00 |
| 30 7 * * 1 | 30 23 * * 0 | 週一 07:30 是 UTC 週日 23:30,星期往前挪一天 |
| 0 0,12 * * * | 0 4,16 * * * | 每天 00:00 與 12:00 |
| 0 6 1 * * | 寫不出來 | 每月 1 日 06:00 是 UTC 上個月最後一天 22:00 |
Kubernetes 1.27 以上的 CronJob 可以直接寫 timeZone: "Asia/Taipei",表達式照台灣時間寫就好;Linux crontab 照主機的系統時區,雲端主機常是 UTC,設定前先確認。
各平台的差異
| 平台 | 欄位 | 要注意 |
|---|---|---|
| Linux crontab | 5 欄 | 照主機時區;星期 7 也是週日 |
| GitHub Actions | 5 欄 | UTC 執行;星期只接受 0-6;最短每 5 分鐘,尖峰時段可能延遲 |
| Kubernetes CronJob | 5 欄 | 1.27 起可設 timeZone |
| Spring、Quartz、node-cron | 6 欄(最前面多「秒」) | Quartz 的星期是 1-7(週日為 1),還有 L、W、# 等延伸語法 |
| AWS EventBridge | 6 欄(最後多「年」) | 日與星期其中一個要寫 ? |
本工具以標準 5 欄計算;貼上 6 欄、7 欄或 L、W、#、? 會說明是哪種平台的寫法,不會硬算。
下次執行時間最多往後找 8 年,所以 2 月 29 日這種四年一次的排程也算得出來;2 月 30 日、4 月 31 日這種永遠不會出現的日期,工具會直接告訴你排程永遠不會執行。
Cron 表達式產生器功能特點
- 可視化 Cron 編輯
- 預覽接下來 5、10 或 20 次執行時間(依你電腦的時區,可同時顯示 UTC)
- 台灣時間自動換成 GitHub Actions 用的 UTC,跨日時星期一起調整
- 產生 GitHub Actions、Kubernetes CronJob、Linux crontab 設定片段
- 常用範本庫
- 反向解析 Cron:貼上表達式看中文說明,錯了會講哪一欄
- 收藏常用表達式(登入後,存在這台瀏覽器)
如何使用Cron 表達式產生器?
- 選擇分鐘、小時、日、月、星期設定,或直接貼上表達式
- 查看中文說明與下次執行時間
- 在「放到排程平台」選 GitHub Actions、Kubernetes 或 crontab
- 複製表達式或整段設定使用
Cron 表達式產生器常見問題
Cron 表達式的格式是什麼?
標準格式為五個欄位:分鐘 小時 日 月 星期,例如 '0 9 * * 1-5' 表示週一到週五早上 9 點。星期 0 是週日;Linux crontab 的 7 也是週日,但 GitHub Actions 只接受 0-6,建議寫 0。
登入後有什麼額外功能?
登入後可使用另外 6 個進階範本,並把常用的表達式收藏在這台瀏覽器。
什麼是 Cron 表達式?
Cron 表達式是一種用於定義定時任務執行時間的字串格式,廣泛用於 Linux 系統和各種排程工具中。標準 crontab 是 5 個欄位(分鐘、小時、日期、月份、星期);Spring、Quartz 等平台會在最前面多一個「秒」欄位變成 6 欄,規則也略有不同。本工具以標準 5 欄計算。
Cron 表達式可以用在哪裡?
本工具產生的標準 5 欄表達式可直接用於 Linux crontab、GitHub Actions、Kubernetes CronJob 與多數 CI/CD 工具。GitHub Actions 的排程以 UTC 時間執行(比台灣慢 8 小時);AWS EventBridge(CloudWatch)要 6 個欄位、日與星期其中一個要寫 ?,Quartz 的星期是 1-7(週日為 1),需自行轉換。
「日」和「星期」都有指定時怎麼算?
標準 crontab 的規則是「符合其一就執行」:0 0 1 * 1 代表每月 1 日、以及每個週一的 00:00,不是「剛好是週一的 1 日」。其中一個是 * 時,就只看另一個。
GitHub Actions 的 cron 為什麼沒在我設定的時間跑?
最常見是時區:GitHub Actions 以 UTC 執行,台灣時間要減 8 小時,用本工具「放到排程平台」選 GitHub Actions 就會自動換算。其次是尖峰時段可能延遲幾分鐘,以及排程只在預設分支上的工作流程檔才會生效。
每 5 分鐘、每天早上 8 點的 cron 怎麼寫?
每 5 分鐘是 */5 * * * *;每天早上 8 點是 0 8 * * *;週一到週五早上 8 點是 0 8 * * 1-5。寫好後看工具列出的下次執行時間確認一次最保險。
Cron 可以設定「每月最後一天」嗎?
標準 5 欄 cron 沒有「最後一天」的寫法(L 是 Quartz 等平台的延伸語法,Linux crontab、GitHub Actions 都不支援)。常見做法是每月 28~31 日都執行,在程式裡判斷明天是不是 1 日再動作。