Cron语法是五个数字和符号字段,不知何故需要表达"每个工作日上午9点,假期除外"或"每隔15分钟在8到6点之间"。字段是分钟、小时、日期、月份和星期几,以一个顺序的方式在第一次尝试时没有人记得正确,且星号、逗号、破折号和斜杠所有意味着根据位置不同的东西。
0 9 * * 1-5看起来合理,但那是上午9点还是晚上9点,以及1-5是否意味着周一到周五或其他取决于cron实现是否计数周日为0或7?在部署管道、备份作业或计划报告中把这个弄错意味着要么无声失败要么作业在不方便的小时触发 — 有时在任何人注意到之前的几周。
每个Cron实现都有其自己的怪癖
标准Unix cron、Kubernetes CronJobs、AWS EventBridge和各种CI平台都大致使用相同的五字段语法,但以小方式不同 — 是否支持秒、星期几编号如何工作、某些速记字符串如@daily是否有效。编写第一次部署时正确工作的计划意味着理解你究竟针对的是cron的哪个风味。
将表达式翻译为纯英文
Bellows包括一个cron表达式助手,取一个计划字符串并解释它在纯语言中实际意味着什么,所以你可以在任何地方部署计划作业之前验证你的意图。
在部署前验证
触发在错误时间的计划作业通常是一个无声的失败 — 没有东西坠毁,它只是在你没有打算时运行,有时与维护窗口重叠或在峰值流量期间锤击数据库。检查cron字符串在合并部署配置之前的纯英文含义在它变为凌晨2点页面之前捕获这个。
阅读某人else的计划
继承一个有十几个现有cron作业的代码库意味着在你可以安全地更改任何之前弄清楚每个作业做什么。快速翻译每个表达式比逐个作业地手动解析五个晦涩字段更快。