DevToolPal
繁

Cron 運算式

每 30 秒

cron 無法安排小於一分鐘的間隔,常見做法是寫兩行 crontab:一行在每分鐘整點執行,另一行先 sleep 30 秒再執行。

* * * * * 在 Cron 運算式解析中開啟

標準 cron 沒有秒欄位。兩行 crontab 可以做到每分鐘執行兩次;Quartz 和 Spring 直接支援秒。Kubernetes 和 GitHub Actions 無法這麼頻繁地執行任務。

逐欄位說明

欄位 值 符合
分鐘 * 任意值
小時 * 任意值
日 * 任意值
月 * 任意值
星期 * 任意值

接下來的執行時間

範例:2026年1月1日 之後的前 6 次執行(UTC)。

  1. 2026年1月1日週四 00:01:00
  2. 2026年1月1日週四 00:01:30
  3. 2026年1月1日週四 00:02:00
  4. 2026年1月1日週四 00:02:30
  5. 2026年1月1日週四 00:03:00
  6. 2026年1月1日週四 00:03:30

各平台寫法

crontab
* * * * * /path/to/command
* * * * * sleep 30; /path/to/command

用 crontab -e 加入這一行。除非設定了 CRON_TZ 或 TZ,否則依伺服器時區執行。

Kubernetes CronJob: 這個排程器無法實現這個排程。

GitHub Actions: 這個排程器無法實現這個排程。

GitHub Actions 一律使用 UTC,最短間隔為 5 分鐘,負載高時排程可能延後啟動。

Quartz
0/30 * * * * ?

Quartz 把秒放在最前面,且日與星期其中之一必須寫 ?。星期以 1–7 表示(從週日開始),使用英文縮寫較不易出錯。

Spring
@Scheduled(cron = "*/30 * * * * *")

Spring 的 @Scheduled(cron = …) 使用六個欄位:秒,再加上一般的五個欄位。

常見問題

› 有每 30 秒執行一次的 cron 運算式嗎?

標準的五欄位 cron 沒有。可以用兩行 crontab(其中一行帶 sleep 30)、設定 OnUnitActiveSec=30s 的 systemd timer,或 Quartz 的 0/30 * * * * ?。

› * * * * * 依哪個時區執行?

Cron 使用執行它的機器或服務的時區。在 Linux 上是系統時區,除非設定了 CRON_TZ 或 TZ;Kubernetes CronJob 可設定 spec.timeZone;GitHub Actions 一律使用 UTC。

› 部署前要怎麼檢查這個排程?

在本站的 Cron 運算式解析中開啟 * * * * *。它會解釋每個欄位,並依本地時間或 UTC 列出接下來的執行時間,全部在瀏覽器中完成。