WMW

Cron 表达式生成器

Free

通过实时字段编辑器、通俗易懂的说明以及接下来 5 次实际运行时间来构建和解析 cron 表达式。支持预设、@ 快捷方式以及可选的 6 字段带秒变体。

完全在你的浏览器中运行。下一次运行时间使用你自己设备的时钟和时区计算。

通俗解释

接下来的 5 次运行时间

基于你设备当前的日期、时间和时区。

    最近活动

    所有人可见。所有访客的最近 20 次使用记录,最新的在前。

    暂无活动记录。快来成为第一个吧。

    评论 (0)

    觉得这个工具有用吗?留下评论、分享一个小技巧,或者告诉我们如何改进它。

    访客评论在发布前会经过审核。 登录 即可立即发布。

    暂无评论,快来抢沙发分享您的想法吧!

    此工具的功能

    Cron 表达式生成器用于构建和解释 Unix/Linux cron、GitHub Actions、Kubernetes CronJob 以及类似调度器所使用的 cron 计划任务。你可以直接编辑表达式,或分别填写分钟/小时/日期等字段,并立即看到通俗易懂的说明,以及该任务实际会运行的接下来 5 个时间点。

    工作原理

    每个字段都会被解析为它所匹配的确切值集合:* 展开为该字段的完整范围,N-M 展开为从 N 到 M 的每一个值,N-M/S(或 */S)会保留该范围内每隔 S 个的值,而以逗号分隔的各项会被合并在一起。只有当某一天的日期同时满足"月"字段,以及"日"字段或"星期"字段(如果两者之一保留为 "*",则两者都需满足;如果两者都受到限制,则满足任一即可 -- 这就是标准 cron 的"或"规则)时,才算匹配。

    为了找到下一次运行时间,该工具从你当前的本地时间开始,逐个字段向前跳转 -- 如果当前月份不符合条件,就直接跳到下一个符合条件的月份;如果月份符合但日期不符合,就直接跳到下一个符合条件的日期;以此类推,一直精确到分钟(如果启用了秒字段,还会精确到秒)。正是这种逐字段跳转的方式,才使得即便是像"仅在 2 月 29 日"这样罕见的计划,也能瞬间解析到下一个闰年,而无需逐天检查中间的每一天。

    解决的问题

    常见问题

    ›cron 表达式中的五个字段分别是什么意思?

    从左到右依次是:分钟(0-59)、小时(0-23)、日(1-31)、月(1-12)和星期(0-7,其中 0 和 7 都表示星期日)。经典的 Quartz/Spring 风格调度会在最前面再加一个秒字段,本工具通过"包含秒字段"选项支持这一点。

    ›为什么 "0 0 1,15 * 1" 会在每个周一以及每月 1 号/15 号都运行,而不是只在两者同时满足时才运行?

    这是 cron 众所周知的一个特性,而不是 bug:当"日"字段和"星期"字段都受到限制(不是 "*")时,标准 cron 会把它们当作"或"而不是"与"关系来处理 -- 只要满足其中一个条件,任务就会运行。如果你只限制了两个字段中的一个,而把另一个保留为 "*",那么只有被限制的那个字段会生效。

    ›*/15 是什么意思,它和 0,15,30,45 有什么区别?

    在这里它们产生的是完全相同的一组值(0、15、30 和 45),但 */N 是一种步长表示法:意思是"从该字段的最小值开始,每隔 N 个取一个值",写起来更短,而且改变 N 时会自动调整范围。像 0,15,30,45 这样的显式列表含义相同,但需要手动输入和编辑。

    ›"下一次运行时间"是按照我的时区计算的吗?

    是的 -- 它们使用你设备当前的时钟和时区,完全在你的浏览器中计算得出。如果 cron 任务实际运行在不同时区的服务器上(云服务器设置为 UTC 的情况非常常见),实际运行时间会相差你所在时区与服务器时区之间的时差。

    ›@daily、@hourly 以及其他 @ 快捷方式是什么?

    它们是 cron、Vixie-cron 以及大多数现代调度器都支持的常见别名,是某个常用精确表达式的简写形式:@yearly 和 @annually 都表示 "0 0 1 1 *",@monthly 表示 "0 0 1 * *",@weekly 表示 "0 0 * * 0",@daily 和 @midnight 表示 "0 0 * * *",而 @hourly 表示 "0 * * * *"。直接在表达式字段中输入其中一个,它就会自动展开。

    相关工具