跳到内容

Cron

粘贴 cron 表达式即可获得说明、下次 10 次执行时间和每个字段含义。包含常用模板。

完全免费 无需注册 浏览器内完成 5 种语言 深色模式

    📖 Cron 语法

    📖 常见的坑

    粘贴 Cron 表达式后,本页会给出自然语言解释并计算接下来 10 次的执行时刻。计算使用的是你浏览器的时区,而非实际运行任务的服务器时区。而且表达式正确与任务是否真的会运行是两回事——这里无法告诉你 cron 守护进程是否在运行,执行用户的权限与 PATH 是否正确。

    情形 会发生什么 怎么处理
    同时指定了「日」和「星期」 这两个字段都不是 * 时,它们按 OR 而非 AND 组合0 0 1 * 1 不是「每月 1 日为星期一」,而是「每月 1 日每个星期一」,一个月约触发 5 次。这一源自 Vixie cron 的行为违反直觉,是事故的常客。 两者中必须有一个保持为 *若确实需要 AND(例如「每月 1 日且为星期一」),请让 cron 每天运行,并在脚本开头判断日期后提前返回
    在「分」以外的字段用了 */n */n 表示「能被 n 整除的值」,而非「每隔 n」。0 */5 * * * 会在 0、5、10、15、20 点运行,而 20 点之后就是次日 0 点,这一段间隔 4 小时,因为 24 不能被 5 整除。在「日」字段上,月末也会出现同样的跳变。 若要真正等间隔,请显式罗列取值:每 6 小时写 0 0,6,12,18 * * *。在「分」字段上,60 能被 5、10、15、20、30 整除,所以 */5 确实是等间隔。若要限定时段,可用范围写法:0 9-18 * * 1-5
    手动能跑,cron 里却不跑 cron 提供的环境与登录 shell 完全不同。PATH 往往只有 /usr/bin:/bin,不会读取 .bashrc,也不会初始化 nvm 或 rbenv。更糟的是,若未配置邮件,标准输出与标准错误不会留在任何地方,连失败都察觉不到。 为每条命令使用绝对路径(照抄 which node 的输出),在 crontab 开头声明 PATH=CRON_TZ=Asia/Shanghai,并在行尾追加 >> /var/log/myjob.log 2>&1。排查时可临时挂上 * * * * * env > /tmp/cronenv 一分钟,即可原样查看 cron 实际传入的环境。

    本解析器针对五字段的标准 cron(分 时 日 月 星期)。在最前面加上「秒」的六字段形式,是 Quartz、node-cron、Spring 的 @Scheduled 等实现的私有扩展,Linux 的 crontab 并不接受。反过来,@daily@reboot 这类特殊字符串在 crontab 可用,但许多库并不解析。请务必查阅实际执行方的文档确认一次。

    📖 使用方法

    1. 1
      5 字段:分 时 日 月 周
      从左到右:分 时 日 月 周(0=周日)
    2. 2
      特殊字符: * / , -
      * = 全部, */N = 每 N, A,B = A 或 B, A-B = A 到 B
    3. 3
      验证执行时间
      上线前务必检查"下次 10 次"是否符合预期

    ❓ 常见问题

    支持 6 字段(含秒)?
    当前仅 5 字段标准。Quartz / Spring 秒级语法暂不支持
    复杂表达式?
    务必检查"下次 10 次"。dow + dom 是 OR 关系(不是 AND)
    时区?
    显示浏览器本地时区。验证与服务器 cron TZ 一致
    🐛 此工具出现问题了吗?

    免费、无需注册。仅提供复现步骤也有帮助。报告将直接发送给运营者并用于改进。

    ※ 为复现问题,浏览器信息 (UA / 屏幕 / 语言 / URL) 将自动发送