Cron 表達式產生器

先選 Linux、Spring 或 Quartz,依你要的時間產生表達式,再複製表達式或整行。 解釋已有的表達式

解釋已有的表達式

依排程寫出 crontab

這一頁產生 Linux crontab:五段,或 @daily 這種簡寫。你選多久跑一次,可以帶上命令,再複製整行。不會把工作裝進系統。格式也能寫出 Spring 和 Quartz:前面加秒 0,Quartz 還會寫 ?,星期用 MON-FRI 這種名字。要解釋已有的表達式,用解釋已有的表達式。時間戳用 Unix 時間戳。

怎麼用

  1. 格式是 Linux Crontab(5 位)、Spring @Scheduled(6 位)或 Quartz(6–7 位)。選單下面一行寫著欄位順序,以及哪個數字是週日。排程預設是每天。時是 2,分是 0,所以表達式是 0 2 * * *,說明是每天 02:00。
  2. 排程可以是每分鐘、每 N 分鐘、每小時、每 N 小時、每天、依星期、依日、每年一次,或簡寫(@daily)。每 N 分鐘會出現每隔,後面寫著分鐘。每小時會出現分。每 N 小時會出現分和每隔,後面寫著小時。每天會出現時和分。依星期會出現時、分,以及週一到週日的按鈕,至少要點亮一個。依日會出現時、分和日。每年一次還會出現月。簡寫裡有 @reboot、@hourly、@daily、@weekly、@monthly、@yearly。這些簡寫只在格式為 Linux 時出現。Spring 和 Quartz 保留同一鐘點,並在前面加上秒。
  3. 命令可以不填。/usr/bin/backup.sh 會接在表達式後面,成為 Crontab 行。輸入時立即更新預設開著。關掉之後,用產生跑一次。
  4. 複製表達式複製這五段或簡寫。複製整行複製表達式加上命令。複製結果複製說明和接下來 10 次執行。顯示範例把依星期設成週一到週五的 02:00,命令填 /usr/bin/backup.sh,表達式是 0 2 * * 1-5,整行是 0 2 * * 1-5 /usr/bin/backup.sh。 表單下面的範例按鈕還有:每 15 分鐘 */15 * * * *,每天 02:00 帶同一條命令 0 2 * * * /usr/bin/backup.sh,平日 09:00 0 9 * * 1-5,週末 09:00 0 9 * * 0,6,週一、週三、週五 09:00 0 9 * * 1,3,5,每月 1 日零點 0 0 1 * *,每年 1 月 1 日 0 0 1 1 *,每 2 小時的第 30 分 30 */2 * * *,@daily,@weekly(週日 00:00),以及 @reboot。旁邊的連結打開解析頁。 全部清除改成每分鐘並清空命令,表達式是 * * * * *。

這些欄位是什麼意思

表達式是分、時、日、月、星期。週日是 0,週一是 1,週六是 6。連續的星期寫成連字號,週一到週五是 1-5。分開的日期用逗號,例如 1,3,5。七天都選則寫成 *。格式選 Linux 時寫出這五段。格式選 Spring 時在前面加 0 作為秒,星期數字不變。格式選 Quartz 時也在前面加 0,並在日或星期上寫 ?,把星期數字改成 SUN–SAT,因為 Quartz 把週日編成 1。

每 N 分鐘是 */N * * * *。每 N 小時是 0、N、2N 這些小時上的第 M 分:M */N * * *。31 日只在有 31 天的月份執行,二月會跳過。命令不會被檢查,只能一行。頁面不會把工作裝進系統。

@reboot 在開機時執行,沒有鐘點,所以沒有接下來 10 次執行。@hourly 是 0 * * * *。@daily 是 0 0 * * *。@weekly 是週日 00:00,即 0 0 * * 0,不是週一。@monthly 是 0 0 1 * *。@yearly 是 0 0 1 1 *。說明裡會寫等同於這五段。接下來 10 次執行用的是這台電腦的本地時間。真正跑 crontab 的機器可能在另一個時區。

會用在什麼地方

  • 每天凌晨 2 點備份:0 2 * * * /usr/bin/backup.sh。
  • 平日早上 9 點:0 9 * * 1-5。
  • 那台機器的午夜剛好合適時,用 @daily。

常見問題

為什麼 @weekly 是週日?

Vixie cron 把 @weekly 定成週日 00:00。若要週一,選依星期並點亮週一。時間仍是 00:00 時,表達式是 0 0 * * 1。

這裡能產生 Quartz 嗎?

能。把格式改成 Quartz。每天 02:00 會變成 0 0 2 * * ?。週一到週五會寫成 MON-FRI。解釋已有的表達式仍用來讀你貼進去的表達式。

下次執行和 UTC 對不上。

接下來 10 次執行用的是這台電腦的時鐘。伺服器上的 crontab 用的是伺服器時區。

二月看不到 31 日。

二月沒有 31 日,會跳過。列表給出下一個有這一天的月份。