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 列出接下来的运行时间,全部在浏览器里完成。