什么是Cron 表达式解析与生成?
Cron 表达式工具拆解五个字段的含义,并计算接下来 8 次实际执行时间,支持按指定时区推算。它能直接回答「这个表达式到底什么时候跑」,解析在浏览器本地完成。
怎么用Cron 表达式解析与生成?
- 1输入 Cron 表达式,或从模板下拉里选一个常用配置。
- 2查看字段拆解,确认每个字段的取值范围。
- 3看右侧接下来 8 次执行时间,验证是否符合预期。
- 4按需切换时区——服务器时区与你的本地时区可能不同。
在代码里怎么实现?
一次性操作用上面的工具,重复性工作建议固化到脚本或项目里。
crontab 写法
# 分 时 日 月 周 命令 */15 9-18 * * 1-5 /usr/local/bin/sync.sh >> /var/log/sync.log 2>&1 # 查看当前用户的定时任务 crontab -l
常见错误与排查
| 现象 | 成因 | 修复 |
|---|---|---|
| 任务在预期之外的时间也执行了 | 日与星期两个字段同时限定时是「或」关系,不是「与」关系。 | 需要「每月 1 号且是周一」这种语义时,只能在脚本内部再判断一次。 |
| 服务器上比预期早或晚几小时 | cron 使用服务器时区,而你按本地时区理解表达式。 | 用工具切换到服务器时区确认,或在容器里显式设置 TZ 环境变量。 |
常见问题
5 段和 6 段表达式有什么区别?+
Linux crontab 是 5 段(分 时 日 月 周),最小粒度是分钟;Quartz(Java 生态)是 6 或 7 段,开头多一个秒字段、结尾可选年字段。把 Quartz 表达式贴到 crontab 会直接报错,需要去掉秒字段。
*/15 和 0,15,30,45 等价吗?+
在分钟字段上等价。但要注意 */15 是从字段的最小值开始步进,在小时字段写 */5 得到的是 0、5、10…而不是从当前小时开始,容易与直觉不符。