Cron 表达式生成器 — 生成并解读 Cron 定时计划

用下拉菜单生成 cron 定时计划,或粘贴现有表达式,用通俗语言解读,并查看接下来 10 次运行时间(本地时区和 UTC)。免费,在浏览器中运行。

分钟 · 小时 · 日 · 月 · 星期。支持名称(JAN、MON)、@daily 这类宏,也可以粘贴整行 crontab。

“星期一至星期五每天,在 09:00 执行。”
分钟
小时
日
月
星期

使用了范围或间隔(1-5);请在表达式框中编辑,或在下方选择值来替换它。

接下来 10 次运行时间
计划任务运行时区:
…

Cron 按运行它的机器所在时区解读计划。GitHub Actions、Vercel、大多数 CI 运行器和云调度器请选择“UTC”;两列显示的是相同的时刻。

粘贴 crontab -l 的输出。注释和 VAR=value 行会被跳过。

每小时的每 5 分钟执行。
/usr/local/bin/healthcheck.sh
在 02:30 执行。
/usr/local/bin/backup.sh --full
星期一至星期五每天,在 09:00 执行。
php /var/www/artisan reports:send
每星期日,在 00:00 执行。
certbot renew --quiet
常用 cron 示例(点击载入)
每 10 分钟轮询一次 API 或队列
每 6 小时(00:00、06:00、12:00、18:00)
每晚 02:30 备份
工作日办公时间内每小时
办公时间内每 30 分钟
每周日午夜(等同于 @weekly)
每月两次:1 日和 15 日 08:00
每月最后几天(在脚本中检查明天是否为 1 日)
周六 03:00 维护窗口
每季度,1 月、4 月、7 月、10 月 1 日 04:15
周五或 13 日(OR 规则的实际效果)
宏:每天午夜一次

完全在浏览器中运行。你输入的任何内容都不会发送给我们或被存储。 浏览全部免费工具.

发现问题,或者觉得哪里可以更好?每条消息我们都会阅读,并尽快修复。

这款免费的 cron 表达式生成器可以用下拉菜单生成五字段 cron 定时计划,也能把任意表达式翻译成通俗语言,并列出接下来十次运行在你所在时区和 UTC 下的时间。粘贴一个表达式、一行 crontab 或整个 crontab,每条定时计划都会得到解释。它支持 crontab、GitHub Actions、Kubernetes CronJob、Vercel cron 和大多数调度器通用的标准语法:星号、列表、范围、步长、月份和星期名称,以及 @daily 之类的宏。

cron 语法紧凑且容不得差错:“0 0 1 * *”和“0 0 * * 1”看起来很像,一个表示每月 1 日,另一个表示每周一。把定时计划转换成文字和具体日期,就能分清任务是在工作日 9:00 运行,还是在周日 UTC 09:00 运行——本页正是为了避免这种错误而存在。计算器严格遵循 Vixie cron,包括它的一个怪癖:以星号开头的日期字段会改变两个日期字段的组合方式。它不支持 Quartz 语法(秒字段、L、W、#),粘贴时会给出提示。

使用方法

  1. 从预设或示例开始,或者输入/粘贴一个表达式(完整的 crontab 行会被截取为其中的定时部分)。编辑时,文字描述和接下来的运行时间会实时更新。
  2. 用五个字段编辑器设置分钟、小时、月中日期、月份和星期几:每个、每 N 个或指定值。
  3. 检查接下来十次运行时间。如果任务将在服务器或 CI 运行器上执行,请选择“UTC”,它们几乎都使用 UTC;每次运行都会同时显示你所在时区和 UTC 的时间。
  4. 要审查现有服务器,请把 crontab -l 的输出粘贴到“解释整个 crontab”中。
  5. 复制表达式,或复制一行以描述作为注释的完整 crontab。
  6. 把它粘贴到 crontab -e、GitHub Actions 的 schedule: 块、Kubernetes CronJob 配置或你所用平台的 cron 设置中。

常见问题

五个字段分别是什么意思?

依次为:分钟(0–59)、小时(0–23)、月中日期(1–31)、月份(1–12 或 JAN–DEC)、星期几(0–7 或 SUN–SAT,0 和 7 都表示周日)。星号表示所有值;1-5 是范围;1,15 是列表;*/10 表示每隔十个值。

同时设置月中日期和星期几会怎样?

标准(Vixie)cron 会在任一字段匹配时运行任务,而不是两者都匹配时。“0 0 13 * FRI”会在每月 13 日和每个周五运行,而不仅仅是 13 号星期五。本页遵循这一规则。有一个细节:如果任一日期字段以星号开头(例如 */2),Vixie cron 会将其视为不受限制,并要求两者同时匹配,所以“0 0 */2 * 1”表示同时是周一的奇数日。Quartz 的规则不同,它用 ? 标记不使用的字段。

cron 使用哪个时区?

运行它的机器或服务所在的时区。个人服务器通常使用本地时间;云端运行器、GitHub Actions、Vercel 和大多数 Kubernetes 集群使用 UTC。在 UTC 运行器上设为 9:00 的任务,在多伦多夏季是 5:00 触发,冬季是 4:00。运行时间表会同时以你所在时区和 UTC 显示每个时间,时差一目了然。

支持秒字段或 L、W、# 扩展吗?

不支持。六字段(含秒)语法以及 L(最后一个)、W(工作日)和 #(第 n 个星期几)扩展属于 Quartz 和部分企业级调度器,而不是标准 cron,大多数平台都会拒绝它们。如果需要“每月最后一个周五”,可移植的做法是让任务每周五运行,并在任务内部检查日期。

为什么我的任务从来不运行?

常见原因:定时计划语法有效但日期不存在(4 月 31 日、2 月 30 日);服务器的时区与你设想的不同;crontab 行没有命令,或命令的 PATH 与你的 Shell 不同;或者间隔比任务本身的运行时间还短,导致实例堆积。本页的“接下来运行时间”列表能发现前两种情况。

Cron 语法速查

• * 所有值 · 5 恰好为 5 · 1-5 范围 · 1,3,5 列表 · */15 每隔 15 个值 · 1-30/5 从 1 到 30 每隔 5 个值

• 名称:月份用 JAN–DEC,星期用 SUN–SAT(不区分大小写);名称也可以组成范围(MON-FRI)。

• @hourly(0 * * * *)、@daily 或 @midnight(0 0 * * *)、@weekly(0 0 * * 0)、@monthly(0 0 1 * *)、@yearly 或 @annually(0 0 1 1 *);@reboot 在开机时运行一次。crontab 支持这些宏,但并非所有平台都支持;五字段写法才是可移植的。

• 星期几的 0 和 7 都表示周日。范围不会回绕:FRI-MON 是错误写法;应写成 FRI-SAT,SUN-MON 或 5,6,0,1。

• 字段之间用空白分隔;在 crontab 中,命令紧跟在同一行。

Cron 定时计划写在哪里

Linux 和 macOS:crontab -e,每行一个任务,先写表达式再写命令。GitHub Actions:on: schedule: - cron: '0 9 * * 1-5',始终为 UTC,繁忙时段运行可能延迟几分钟。Kubernetes:CronJob 的 schedule 字段。Vercel:vercel.json 中带 path 和 schedule 的 crons,UTC。云调度服务(AWS EventBridge、Google Cloud Scheduler)接受相同的语法,只有细微的方言差异,EventBridge 还多一个年份字段。

接下来的运行时间是如何计算的

计算器从现在开始逐个日历日向后推算。对每一天,它先检查月份,再按 Vixie 规则检查月中日期和星期几字段(两者都受限时取“或”,任一以 * 开头时取“与”),然后才列出匹配的小时和分钟。不严格晚于当前分钟的运行会被跳过,因此恰好在这一分钟到期的任务会显示其下一次运行时间。

在你自己的时区,夏令时会产生影响。在时钟拨快的那天不存在的时间(北美大部分地区的 02:30)会被跳过,而在时钟拨回时出现两次的时间只运行一次。这是 cronie 处理固定时间任务的方式;其他守护进程可能不同,这也是服务器通常以 UTC 运行 cron 的又一个原因。

指定了不存在日期(2 月 30 日、4 月 31 日)的定时计划永远不会触发,页面会明确提示。2 月 29 日的定时计划只在闰年触发;搜索会向后查找九年,足以覆盖任何实际的定时计划。

相关免费工具

  • 正则表达式测试 — 用示例文本测试正则表达式,实时高亮匹配结果,显示捕获组并预览替换效果。免费,在浏览器中运行。
  • JSON 格式化 — 格式化、压缩和校验 JSON,解析错误精确到行和列。在浏览器中运行,无需上传。
  • 单位换算器 — 在浏览器中即时换算所有常用单位——公制和英制、烹饪、数据存储、压力、能量、速度、油耗。