Menu

Cron 表达式生成器

生成、解读和预览 cron 计划,并显示接下来的运行时间。

作者 Nethanel Bar, Co-founder & CEO

最后更新

准备好真正学会编程了吗?

Coddy 让你在浏览器里编写真实代码来学习:互动课程、即时反馈,卡住时还有 AI 帮忙。

Cron 表达式是什么?

Cron 表达式是描述周期性计划的一种紧凑写法。它和 Unix cron(最早的 Linux 定时调度器)用的是同一套语法,如今几乎所有任务调度工具都在用它:Kubernetes CronJob、GitHub Actions 定时触发、AWS EventBridge、Cloudflare Workers、Vercel cron,以及大多数 CI/CD 平台。

这种格式看起来吓人,其实只是用空格分隔的五个字段:分钟、小时、日期(一个月中的第几天)、月份、星期。每个字段可以是一个数字、一个列表(1,15)、一个范围(9-17)、一个步长(*/5)或通配符(*)。好用的 cron 工具会把表达式翻译成易懂的语言,并列出接下来的触发时间,让你在部署前就能核对。

有些平台在基础的 5 字段语法上做了扩展,在开头加一个“秒”字段(Quartz、Spring、Kubernetes 的 6 字段格式),或在末尾加一个“年”字段。粘贴表达式之前,务必先确认你的调度器接受哪种格式。

编写 cron 计划时你会学到什么

  • 标准 cron 表达式有 5 个字段:分钟、小时、日期、月份、星期。
  • * 表示该字段的“每一个值”,这也是计划触发次数比预期多的最常见原因。
  • */N 表示“每 N 个单位”,分钟字段里的 */5 就是“每 5 分钟”。
  • 日期和星期两个字段会相互影响:两者都设置会改变计划的范围,而在经典 Unix cron 中,把其中一个设为 *、只给另一个指定值,才是表达“仅工作日”或“仅每月某天”规则的稳妥写法。

一步步写出 cron 表达式

  1. 从预设开始

    选一个和你需求接近的预设,例如“每分钟”“每小时”“每天 09:00”“工作日 09:00”“每月 1 日”。表达式会出现在编辑器里。

  2. 调整每个字段

    编辑分钟、小时、日期、月份、星期。用 * 表示任意值,也可以用逗号列表、范围(9-17)或步长(*/15)。

  3. 阅读易懂的解释

    工具会把你的表达式翻译成一句话(例如“在 09:00 每逢工作日”)。如果这句话和你想要的不一致,说明表达式写错了。

  4. 预览接下来的触发时间

    按你所在的本地时区核对接下来 5 至 10 次的运行时间。如果计划时间靠近夏令时切换点,要特别留意。

  5. 复制到你的调度器

    把表达式放进你的 crontab、GitHub Actions 工作流、Kubernetes CronJob,或你正在使用的任何调度器。

Cron 字段速查表

标准 cron 表达式的五个字段,按顺序排列。参考:POSIX crontab(5) 手册页。

位置字段取值范围特殊字符
1分钟0 至 59* , - /
2小时0 至 23* , - /
3日期1 至 31* , - / ?(部分方言)
4月份1 至 12 或 JAN 至 DEC* , - /
5星期0 至 6(周日=0)或 SUN 至 SAT* , - /

可以动手试试的 cron 表达式示例

每 5 分钟

表达式

*/5 * * * *

含义

每 5 分钟一次:从整点开始,之后每隔 5 分钟。

步长(*/5)是表达“每 N 个”的最简单写法,不用把每个数字都列出来。常用于健康检查和轮询任务。

工作日上午 9 点

表达式

0 9 * * 1-5

含义

每周一至周五的 09:00。

星期范围 1-5 表示周一到周五。适合上班时间的提醒和只在工作日发送的摘要。

每月第一天的午夜

表达式

0 0 1 * *

含义

每月 1 日的 00:00。

日期设为 1,其他字段都用 *,就得到一个真正的每月任务。常用于账单、报表和轮换类任务。

工作日上班时间,每小时两次

表达式

0,30 9-17 * * 1-5

含义

周一至周五,09:00 到 17:00 之间每小时的第 0 分和第 30 分。

逗号列表(0,30)加一个范围(9-17)再加工作日。像只在上班时间才有意义的 BI 数据刷新或队列清理,就会用这种计划。

Cron 的常见错误

  • 忘了时区。大多数 cron 守护进程按“服务器”的时区触发,而不是你的时区。平台支持的话,请显式设置时区。
  • 同时设置日期和星期。在经典 Unix cron 中,只要某天满足“其中任意一个”条件就会触发,大多数人第一次遇到都会吃惊。
  • 用 */45 并以为它每 45 分钟触发一次。步长是从 0 开始计算的,所以 */45 在第 0 分和第 45 分触发,并不是真正的 45 分钟间隔。
  • 部署前不预览接下来的触发时间。一个“差不多对”的 cron 表达式,触发频率可能是预期的 60 倍。
  • 忘了夏令时切换。0 2 * * * 这样的计划,在时钟回拨那天可能运行两次,而在时钟拨快那天一次也不运行。

Cron 表达式常见问题

怎么写 cron 表达式?
标准 cron 表达式有五个用空格分隔的字段:分钟、小时、日期、月份、星期。用 * 表示“每一个值”,用数字表示确定的值,也可以用逗号列表(1,15)、范围(9-17)或步长(*/5)。
*/5 * * * * 是什么意思?
意思是“每 5 分钟”。分钟字段里的 */5 在第 0 分触发,之后每隔 5 分钟一次:0、5、10、15、…、55;其他字段都是 *,表示每小时、每天、每月、每周的每一天都会触发。
cron 使用哪个时区?
默认情况下,cron 使用它所运行的系统的时区。大多数云端调度器允许你显式设置时区(TZ=Europe/Berlin、AWS 的计划表达式等)。拿不准时,就用 UTC 保存计划。
cron 表达式能每秒运行一次吗?

标准 5 字段 cron 的最小单位是分钟,所以最高精度是每分钟一次。Quartz cron、Spring cron 和部分 Kubernetes 版本增加了第 6 个“秒”字段,支持一分钟以内的计划。

0 0 * * 0 和 0 0 * * 7 有什么区别?
两者都表示周日午夜。在大多数 cron 实现中,星期的取值是 0 至 6(周日至周六),但为了兼容某些方言,7 也被当作周日。

了解更多

其他开发者工具

Coddy 编程语言插图

和 Coddy 一起学编程

开始