Cron
粘贴 cron 表达式即可获得说明、下次 10 次执行时间和每个字段含义。包含常用模板。
完全免费
无需注册
浏览器内完成
5 种语言
深色模式
📖 Cron 语法
- •
*— 任意值 - •
5,10,15— 列表 - •
1-5— 范围 - •
*/15— 步长(每 15) - •
@hourly @daily @weekly @monthly @yearly— 别名
📖 常见的坑
粘贴 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
5 字段:分 时 日 月 周从左到右:分 时 日 月 周(0=周日)
-
2
特殊字符: * / , -* = 全部, */N = 每 N, A,B = A 或 B, A-B = A 到 B
-
3
验证执行时间上线前务必检查"下次 10 次"是否符合预期
❓ 常见问题
支持 6 字段(含秒)?
当前仅 5 字段标准。Quartz / Spring 秒级语法暂不支持
复杂表达式?
务必检查"下次 10 次"。dow + dom 是 OR 关系(不是 AND)
时区?
显示浏览器本地时区。验证与服务器 cron TZ 一致
🔗 相关工具
🐛 此工具出现问题了吗?
免费、无需注册。仅提供复现步骤也有帮助。报告将直接发送给运营者并用于改进。
✅
感谢您的反馈!
已送达运营者,将用于改进工具。