两种描述重复计划的方法
Cron 表达式在线解析与生成 — 执行时间、RRULE 和时区预览
Cron 通过匹配时间字段触发系统任务;RRULE 则从 DTSTART 开始展开日历重复规则。两者可能得到相似日期,但语法和语义不能互换。
Cron 表达式 · 按时间字段匹配
ORiCalendar RRULE · 展开日历重复集合
逐项解析 POSIX Cron 的五个字段
15 10 * * 1-5每个工作日 10:15 执行
15分钟
0–59
10小时
0–23
*日
1–31
*月
1–12
1-5星期
0–7
Cron 方言边界
POSIX / Vixie
5 个字段
含秒 / Quartz
6–7 个字段
云调度平台
限制由服务商定义
从 DTSTART 展开 RRULE 重复部分
DTSTART;TZID=America/New_York:20260803T101500 RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR;COUNT=8
DTSTART提供起始日期、时间及规则中缺少的字段
FREQ必填的重复频率
INTERVAL / BYDAY控制展开间隔与筛选条件
COUNT 或 UNTIL限定重复范围,二者不能同时出现
TZID解释当地墙上时间
在选定的 IANA 时区中预览有限次执行时间
RUN 1
3 日 周一 · 10:15
RUN 2
5 日 周三 · 10:15
RUN 3
7 日 周五 · 10:15
RUN 4
10 日 周一 · 10:15
RUN 5
12 日 周三 · 10:15
春季缺口
01:3002:00–02:59 skipped03:30
某个本地时间可能根本不存在,调度器会跳过它或按自身策略调整。
秋季重叠
00:3001:00 occurs twice02:30
同一个本地时间会出现两次,UTC 偏移和调度器策略共同决定实际执行时刻。
上线前检查清单
- 选择并记录 Cron 方言
- 显式保存预期的 IANA 时区
- 测试 DST 切换和月末边界
- 限制 RRULE 预览次数与不可信输入
- 上线后记录未来预期执行时间
- 监控漏执行或重复执行
Cron 与 RRULE 常见问题
- Cron 和 RRULE 可以互相替换吗?
- 不可以。Cron 按调度器方言匹配时间字段;RRULE 按 RFC 5545 从起始日期展开日历重复集合。
- 为什么同一个 Cron 表达式会在不同的本地时间运行?
- 调度器时区或夏令时偏移可能发生了变化。请保存运行时使用的时区,并检查真实的后续时刻,而不只看文字解释。
- RRULE 可以无限重复吗?
- 可以。未提供 COUNT 和 UNTIL 时,规则会无限重复;因此预览会主动限制结果数量,避免不可信规则造成无限计算。