开发者工具 · Crontab 生成器
crontab(5) 字段:POSIX 指定的内容以及 Vixie 扩展是什么
· 背景
计划任务 可移植性 验证
并非每个 cron 功能都是标准的。这篇文章将 POSIX crontab 规范要求的内容与 Vixie cron 添加的和大多数 Linux 系统采用的扩展(步骤、名称、昵称)分开。
另一个调度程序仍可能不支持有效的 ToolAcre 表达式
通过 ToolAcre 的调度已满足此解析器,但不是每个 cron 实现。可移植性始于这个谦虚的声明。该路由仅接受五个字段和定义的令牌语法。目标设备、服务或框架可以接受更少、更多或结构上不同的东西。
将浏览器结果保留为一项证据:表达、描述、警告和预览区域。在部署之前,比较目标文档并运行无害的测试。仅当本地绿色信号提升为通用兼容性保证时,验证才会变得危险。
存储库未建立 POSIX 要求的内容
工作簿将 POSIX 要求与扩展分开,但存储库源中没有出现 POSIX 规范。 ToolAcre 的行为无法证明标准要求哪些功能。因此,本节描述已实现的语法,但未将其分配给标准主体。
实现的数字范围为 0–59 分钟、0–23 小时、1–31 月中的天、1–12 月和0–7 工作日。通配符、单个值、包含范围、逗号列表、通配符步骤、范围步骤和带有步骤的裸起始值都经过解析和测试。
名称、步骤、星期日 7 和别名在这里实现,没有标准历史声明
月份名称 JAN 到 DEC 以及工作日名称 SUN 到 SAT 不区分大小写。名称可以单独出现、出现在列表中或出现在范围中。工作日 7 被接受为星期日并标准化为 0。这些是 `parseField` 的可观察属性,无论另一个实现如何对它们进行分类。
别名表扩展 `@yearly`、`@annually`、`@monthly`、`@weekly`、`@daily`、`@midnight` 和 `@hourly`。 `@reboot` 被故意拒绝,因为它没有可供预览的日历时间表。未知的 at 符号词会收到命名受支持列表的错误。
环境分配支持在此解析器之外
环境分配不是此表达式语法的一部分。输入框需要一个计划,`parseCron` 在解析支持的别名后将其分成五部分。无法通过此路由测试 `KEY=value` 行的扩展、引用或可移植性。
这一遗漏可以防止错误的标准声明。完整的 crontab 文件可以包含纯表达式工具永远不会看到的结构。针对目标分别检查这些内容。 ToolAcre 的精确字段错误不应被重新用作对较大文件中不相关行的判断。
检查目标语法并使用无害的进度测试
目标检查应从字段计数和运算符开始。确认是否接受名称、Sunday 7、斜杠步骤和 at 符号别名。然后在近期安装一个无害的可观察操作,在捕获证据后将其删除,并将目标结果与预期表达进行比较。
不要使用敏感命令或等待罕见的年度日期来测试可移植性。选择区分语法支持的最小安全探针。 ToolAcre 可以帮助构建该计划并解释它,而目标运行则建立浏览器无法知道的部分。
工作示例:ToolAcre 语法下的步骤形式和显式列表
每五分钟,ToolAcre 就会接受 `*/5 * * * *`。它还接受显式分钟列表 `0,5,10,15,20,25,30,35,40,45,50,55 * * * *`。解析将两个分钟字段扩展为相同的 12 个值,因此它们的下一次运行候选者在相同的起始时刻和区域下匹配。
当目标缺乏步骤语法时,显式列表可以作为后备候选,但此存储库无法证明该目标的列表支持。在 ToolAcre 中比较两种形式的语义等效性,然后验证目标文档的形式。这里的等价性并不是那里的可移植性证明。
六字段语法被拒绝;此处未记录其外部语义
不接受第六个字段。该错误表明前导秒样式属于 Quartz 或类似 systemd 的输入,但解析器不实现这些语法。它没有年份字段,也没有 `?`、`L`、`W` 或 `#` 运算符。
在尝试翻译之前对字段进行计数。如果不支持的语法带有调度含义,则明显的五字段重写可能是有损的。使用源调度程序的文档和测试,然后仅表达 ToolAcre 目标语法可表示的需求。其他任何事情都应该保持明显的不兼容性。
要点:了解哪些功能是扩展,并在可移植性很重要时使用生成器来构建和检查这两种表单
可移植性是一种比较,而不是嵌入在表达式中的标签。 ToolAcre 提供了经过充分测试的一侧:五个位置、数字边界、选定的名称、可组合范围/lists/steps 和七个别名。它还明确拒绝畸形或外来形式。
使用该契约进行精确推理,然后验证对方。显式列表和步骤在此解析器中可以是相同的,而在其他地方只有一个有效。报告方言边界比调用本文并未实际引用的标准更具可操作性。