如何在每个月的第一个星期日运行 Kubernetes Cron Job?

问题描述 投票:0回答:1

一开始,我使用

@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 cron
1个回答
0
投票

要安排 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 运行的脚本中实现。

© www.soinside.com 2019 - 2024. All rights reserved.