一开始,我使用
@monthly
表示 .spec.schedule
字段,它正在工作,但我不喜欢这项工作在每个月的第一天午夜运行。
我希望它在每月第一个星期日下午 1 点运行。
所以我根据这个答案尝试了下一个:
0 13 1-7 * */7
但是该工作已于上周日执行(这不是该月的第一天),所以我认为出了问题。
我看到可以使用
#
字符:
0 13 * * SUN#1
但是升级 cron 作业时会产生以下错误:
Invalid value: "0 13 * * SUN#1": failed to parse int from SUN#1: strconv.Atoi: parsing "SUN#1": invalid syntax
是否有人找到了让它发挥作用的方法(也许一周中的另一天)?
要安排 Kubernetes CronJob 在每月第一个星期日下午 1 点运行,您需要使用特定的 Cron 表达式。您尝试的表达式 (
0 13 * * SUN#1
) 是某些 Cron 实现的正确格式,但 Kubernetes 不支持 其 CronJob 调度语法中的
#
字符。
相反,您可以使用月份和星期几字段的组合:
0 13 1-7 * 0
该表达式将使用:
0 13
:13:00(或下午 1 点)。1-7
:每月的第 1 日到第 7 天。*
:每个月。0
:仅限周日。但是,如果该月的第一天不是星期日,则该表达式仍可能在该月的 2 号至 7 日的星期日触发。
为了防止这种情况,您需要在 Cron 表达式之外实现额外的逻辑:Kubernetes 的 CronJob 没有对此特定调度要求的内置支持。
一种方法可能是从 1 号到 7 号每天运行作业,并在作业脚本的开头进行检查,以便在不是第一个星期日时退出。该逻辑可以在 CronJob 运行的脚本中实现。