日期、时间与计划
检查工作日 9 点至 17 点时段每 15 分钟的 Cron
使用工具
想在工作日早晨备份,复制 Cron 式很容易,但认出五个字段不等于日期正确。添加星期可能增加运行日,起点相同的候选被排除也容易误以为出错。既要读表达式,也要看实际日期。
先列三个工作日上午九点
0 9 * * 1-5输入表达式,选 Asia/Tokyo、起点 2024-01-05T00:00:00Z、三条候选。起点是东京周五九点,结果为一月八、九、十日 00:00:00Z,即东京周一至周三九点。Z 表示 UTC,别误读为当地午夜。
这里排除周末,不排除节假日。一月八日即使当地放假仍会匹配。先分清工作日指周一至周五还是企业营业日。假日排除需要执行系统额外规则,可用营业日计算核对日期。
不包含恰好等于起点的候选
候选严格晚于起点。周五九点虽匹配,但等于起点时排除。将起点回退一秒至 2024-01-04T23:59:59Z,首条变一月五日 00:00:00Z。区分含当前瞬间与下一次即可理解少一次的现象。
复现问题应同时提供式、时区和固定起点。现在起十次会因人因日变化。检查月末或星期边界时从边界前开始,可用短列表定位。
以为是一号且周一,实际不是
0 9 1 * 1本工具中此式匹配每月一号或周一九点。从 UTC 2024-05-31T00:00:00Z 开始,会出现六月一日周六、三日周一、十日周一,并非只有一号恰为周一。增加条件并不总是缩小 Cron 范围。
星期 0、7 为周日,1 为周一。本工具不接受月份星期名称、L/#/?、含秒六字段及服务专用格式。迁移时勿机械删除多出的字段,先确认原规范中秒、年含义,再重新表达支持的计划。
*/20 不是距上次二十分钟
*/20 * * * *09:07 开始,下次为 09:20 而非 09:27。Cron 匹配字段,不是从上次完成后等待。任务耗时二十五分钟也不自动推迟候选。互斥、重试和停机漏跑由执行系统决定。
夏令时的两点要转回当地时间看
America/New_York 的 0 2 * * * 从 2024-03-09T08:00:00Z 开始,本工具首条是 2024-03-10T07:00:00Z,当地三点。解析器如此处理不存在的两点,次日为 06:00:00Z、当地两点。不能断言所有调度器都跳过缺失时刻。
秋季重复时刻运行一次还是两次,应查目标调度器。本列表是库生成候选,不保证服务器或云平台执行。固定 UTC 会改变当地时刻,固定当地时刻会改变经过间隔,应按业务需要选择。
注册计划前留下核对记录
分别以普通周、月末和偏移切换前为起点检查。最多一百条且搜索五个历年;上限错误不是成功的空计划,应重查式和期间。要求一百次年度任务超出范围。
交接时记录式、地区、起点、最初预期候选及假日、重叠规则。SheepDev 不注册任务也不执行命令;先把疑问变具体案例,再与实际环境核对。
只看接下来十次,可能漏掉月末空缺
0 9 31 * * 指每月 31 日,不会在短月份自动补到月末。应查看跨二月、四月的候选。每月同日、月末、上次后三十天是不同计划,支持的五字段语法不能表达时,不能用看起来相近的式子当完成。
每分钟候选正确,也不说明任务超过一分钟时如何重叠。等待、跳过、并行是执行平台策略,不是式子属性。候选时间验证与互斥、重试设计应分开,Cron 正确不证明已完成或失败后可安全重做。
保留普通周、跨月、跨年及相关夏令时边界的固定起点例子。只从现在测试,每天证据不同。固定起点和时区可做回归检查。有界搜索找不到候选,只能说明所查范围,不能断言未来永不运行。