从一条真实表达式讲起
本站教程每天早上自动发布,用的表达式就是 30 8 * * *。拆开读:第 1 段 30 是分钟、第 2 段 8 是小时、第 3 段 * 是"每天"、第 4 段 * 是"每月"、第 5 段 * 是"星期几不限"——连起来是"每天 08:30 执行"。从今天 2026-10-15 推算,下一班次就是明天 08:30,这种"推演下一班次"是最实用的验证方法。
五个字段的含义与区间
- 分钟:0-59(30 表示第 30 分钟)
- 小时:0-23(8 表示早上 8 点,20 表示晚上 8 点)
- 日期:1-31
- 月份:1-12
- 星期:0-6(0 和 7 都是周日,但部分系统只认 0)
三个进阶表达式
*/15 9-18 * * 1-5 表示工作日 9 点到 18 点内每 15 分钟一次,把刻度枚举出来是每小时 4 刻、工作时段共 24 刻。0 9 * * 1 是每周一 09:00。0 0 1 * * 是每月 1 日零点。写完把班次推演出来列三五个,和需求对表,比死记语法有效。
常见问题
- 日和周都写了会怎样?
- 两者是"或"关系:0 0 1 * 1 是"每月 1 日或每周一",不是"1 日且周一"。
- 为什么我的任务没跑?
- 先查服务器时区(容器与宿主机常差 8 小时),再查 crontab 是否有输出重定向撑爆日志。
- 能精确到秒吗?
- 标准 cron 最小粒度是分钟,部分调度器(Quartz)支持秒级字段为 6 段。
一条表达式值不值得信,推演三个班次就知道。