酷酷站汇
⏰

Crontab 定时任务生成器

写好表达式,直接看以后几点执行

热门
语法没问题 · 周一至周五 · 09:00 · 但未来 4 年内没有任何一天命中,例如「2 月 30 日」这种日期

下次执行

—

无匹配日期

上一次执行

—

过去 31 天内没跑过

未来 24 小时

0 次

按 本机 时钟

未来 4 年都不执行。检查是不是写了 2 月 30 日、2 月 31 日,或「4 月的 31 号」这类不存在的组合。

工具介绍

cron 难记的不是关键字,而是「这串数字下次到底是几点」。工具输入表达式后立刻做三件事:把每一段展开成实际命中的数字并给出中文含义;按你选的时区算出后面若干次执行的日期时间,附「3 小时后」这种相对提示;顺手把「日」和「星期」同时限定时 crontab 取「或」这类坑标出来。国内服务器常见的 UTC 与东八区错位,也能通过切到 UTC 一眼看出来。写完直接复制到 crontab -e、宝塔计划任务或 Spring 的 @Scheduled 上,不用再去翻手册。

怎么用

  1. 输入表达式,或点上方「工作日 09:00」「每 5 分钟」这类预设先看效果
  2. 在「执行时间表」核对未来几次执行时刻,怀疑时区不对就切到 UTC 再看一遍
  3. 需要看每一段展开成什么数字,切到「字段拆解」;报错信息会直接指出是第几段写错
  4. 复制「各调度器写法」里的表达式贴进 crontab -e 或 @Scheduled

常见问题

「日」和「星期」能同时填吗?

能填,但三种调度器结果不一样:Linux crontab(Vixie 实现)取「或」,任一命中就执行;Spring 的 CronExpression 取「且」,两个条件要同时满足;Quartz 规定两者必须恰好有一个写 ?。想要「每月 1 号或者每周一」,最稳的做法是拆成两条任务。

明明设了 9 点,服务器为什么 1 点才跑?

crontab 跟的是服务器时区,不是你的时区。用 timedatectl 或 date 确认一下;机器是 UTC 而你按北京时间写「0 9 * * *」,实际会在东八区 17 点触发。可以给任务加 CRON_TZ=Asia/Shanghai(部分实现支持),或者按 UTC 时间倒推 8 小时写表达式——本工具切到 UTC 模式就是帮你核对这件事。

*/5 和 5/10 有什么区别?

*/5 从 0 开始每 5 个一次,即 0、5、10……;5/10 表示从 5 开始每 10 个直到该字段上限,即 5、15、25、35、45、55。只写 5 就只是 5 这一个值。区间也能带步长,例如 9-18/3 是 9、12、15、18。

为什么 L、W、# 被判成语法错误?

这三个是 Quartz 与 Spring 的扩展写法,分别表示当月最后一天、最近的工作日、当月第 N 个周几,Linux crontab 并不支持,所以本工具按标准 cron 拒绝它们。真要用,就把表达式写成两条任务或用脚本判断日期,别指望 crontab 认。

5 段和 6 段都能算吗?

都能。5 段是标准 crontab:分 时 日 月 周;6 段最前面多一个「秒」,是 Spring @Scheduled 和 Quartz 的写法。工具会按段数自动判断,字段拆解表也会多出「秒」这一行。

同分类其它在线工具

相关推荐