开发者工具 · Crontab 生成器
Cron 步骤和范围语法:*/15, 1-5,列表以及它们的组合方式
· 工作原理
计划任务 调度 开发人员工作流程
步骤、范围和列表是人们在不理解的情况下复制的 cron 语法的一部分。这篇文章解释了每一个,它们如何筑巢,以及像 */7 这样的惊喜,而不是“每 7 天”的意思。
每 15 分钟,但只有 9 到 5 — 这个天真的表达在晚上也会触发
“办公时间每十五分钟”包含两个独立的限制。分钟字段需要刻钟标记,而小时字段需要有界的跨度。仅写入 `*/15 * * * *` 解决了前半部分的问题,并且仍然会产生整个晚上的运行。该表达式必须在表达有关工作日的任何内容之前对这两个约束进行编码。
ToolAcre 解析五个计划字段,而不是命令。从 `*/15 9-17 * * 1-5` 开始,然后检查句子和下次运行预览。该检查发现了将 `9-17` 放在分钟位置或不限制工作日字段的常见错误。生成器创建并解释一个表达式;它不安装或执行作业。
范围 — 1-5 和 9-17 作为单个字段内的包含范围
连字符在一个字段内创建一个包含范围。小时位置中的 `9-17` 扩展为九个值:9 到 17。同样,工作日位置的 `1-5` 扩展到星期一到星期五,因为此解析器将星期日映射到 0,星期一映射到 1 等等。两个端点都参与,因此 17:00 在选定的小时范围内。
范围不能跨越字段边界。解析器拒绝后向形式,例如 `17-9` 并建议将所需值拆分为两个列表项。这种拒绝很有用,因为调度产品之间的包装规则不同。这里,范围总是在已经满足字段的数字或可接受的名称限制的值之间向上移动。
步骤 — */15 和 9-17/2, 以及为什么步骤在字段的下限处重新启动而不是连续计数
斜线选择从起点开始的每第 n 个值。分钟字段中的 `*/15` 从最小值零开始,并扩展到 0、15、30 和 45。 `9-17/2` 从 9 开始,并产生 9、11、13、15 和 17。步骤属于一个字段;它不计算跨小时界限的经过分钟数。
解析器还接受带有步骤的裸开始。分钟字段中的 `5/15` 表示 5、20、35 和 50,因为隐式上端点是 59。步骤必须是正整数,并且不能超过字段的整个范围的大小。零、非数字或过大的步骤会收到特定于字段的验证错误,而不是猜测的解释。
列表可以在一个字段中组合值、范围和步进范围
逗号将同一字段中的多个部分联合起来。一个简单的 `1,15,30` 命名了三个分钟值。更精细的输入可以组合单独值、包含范围和步进范围:测试的 `0,10-20/5,59` 扩展为 0、10、15、20 和 59。在以后的计算使用它们之前,重复的结果将被删除,扩展的值将被排序。
该语法是组合语法,但仍然很狭窄。每个逗号项可以包含一个斜杠,并且范围必须恰好有两个非空端点。杂散逗号、多个斜杠或未完成的范围将被拒绝,并给出命名字段的原因。这使得混合表达式可以审阅,而无需假装格式错误的标点符号具有常规含义。
工作示例: */15 9-17 * * 1-5 — 枚举它生成的分钟数和 17:45 边缘情况
对于 `*/15 9-17 * * 1-5`,分钟值为 00、15、30 和 45;时间为 09 至 17;工作日值为周一至周五。在每个包含的工作日,第一个候选者是 09:00,最后一个候选者是 17:45。没有 18:00 因为 18 超出了小时范围。
最后运行的边缘说明了为什么字段扩展胜过会话速记。对于一位读者来说,“朝九晚五”可能意味着停在 17:00 ,而对另一位读者来说,则意味着包括完整的五点钟时间。 Cron 的小时字段选择一个小时桶,然后分钟字段选择其中的位置。如果 17:45 是不需要的,则所需的边界需要不同的表达式或命令端逻辑。
每月某天的步骤从每月的 1 日开始扩展;这不是经过一周的间隔
`*/7` 从该字段的最小值 1 扩展,在这些日期存在的情况下生成 1、8、15、22 和 29。下个月开始时,该字段再次从 1 开始。因此,它描述的是选定的日历日期,而不是连续前进的 7 天间隔。二月和较短的月份只是缺少一些重要的日期。
相同的语法在另一个字段中具有不同的起始值。 `*/7` 分钟从 0 开始,而每月的 `*/7` 天从 1 开始。 ToolAcre 的解析器从每个字段规范中导出序列,其预览搜索日历日期。对于实际的每周节奏,限制一周中的某天,而不是将每月某天的步进视为经过的持续时间。
不支持的运算符被拒绝而不是解释为另一种 cron 方言
此五字段解析器不实现 `L`、`W`、`#` 或 `?`。这些字符不会被默默丢弃,也不会以可移植的 crontab 语法形式呈现。六个字段也被拒绝,并解释说额外的领先位置属于面向秒的调度程序风格,而不是该路由读取的格式。
边界是经过深思熟虑的:分钟、小时、月份、月份和星期几是这里完整的位置语法。在从另一个调度程序移动表达式之前,计算其字段并识别其运算符。生成器可以验证自己的方言;它无法验证 Quartz、systemd 日历语法或云服务的变体。
要点:步骤的意思是“从范围的底部开始”——生成器用您可以检查的单词解释了步骤表达式
范围定义包含范围、逗号合并片段以及从特定字段开始的斜线样本值。按该顺序读取这些操作会将密集标记转换为可以检查的有限集。它还解释了诸如 17:45 之类的边缘,而不依赖于作者可能有其他含义的复制短语。
使用生成器作为查看界面:输入表达式、阅读说明、检查警告并比较预期区域中接下来的五个挂钟运行。然后将经过验证的五个字段放在您自己的环境中的真实命令旁边。进度表构建和工作执行仍然是独立的职责。