You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Kubernetes Cron Job每月第一个周日运行?

解决K8s CronJob每月第一个周日执行的问题

先给你直接可用的方案:

正确的Cron表达式

直接用这个表达式就能实现每月第一个周日13点执行:

0 13 1-7 * 0

解释下各字段的意思:

  • 0:分钟为0
  • 13:小时为13点
  • 1-7:日期在当月1号到7号之间
  • *:任意月份
  • 0:周日(K8s的Cron语法里,0代表周日,部分系统用7,这里用0没问题)

K8s的Cron是日期和星期条件同时满足才会触发任务,而每个月的第一个周日必然落在1-7号范围内,第二个周日肯定在8号及以后,所以这个表达式只会触发当月第一个周日的13点,完全符合你的需求。

你之前的错误原因

  1. 第一个表达式0 13 1-7 * */7:
    星期字段写了*/7,意思是每7天执行一次,相当于每周日都触发,不管日期是否在1-7号,所以才会在非当月第一个周日执行任务。

  2. 第二个表达式0 13 * * SUN#1:
    K8s用的Cron解析器不支持#这种语法(这是某些第三方Cron实现的特性,比如Anacron),所以会报语法错误。

扩展:其他星期几的每月第一个执行方案

如果要实现每月第一个其他星期几的任务,只需要修改最后一个字段:

  • 每月第一个周一10点:0 10 1-7 * 1
  • 每月第一个周三15点:0 15 1-7 * 3
  • 每月第一个周六9点:0 9 1-7 * 6

备选方案:脚本内判断(更灵活)

如果担心某些极端情况(虽然理论上不存在),也可以在任务脚本里加判断逻辑,确保只有当月第一个周日才执行:

比如写一个shell脚本:

#!/bin/bash
# 获取当月第一个周日的日期
first_sun=$(date -d "$(date +%Y-%m-01) +$(( (7 - $(date +%w -d $(date +%Y-%m-01)) ) % 7 )) days" +%d)
# 获取今天的日期
today=$(date +%d)

if [ "$today" -eq "$first_sun" ]; then
  # 这里写你的任务逻辑
  echo "执行月度任务"
else
  exit 0
fi

然后CronJob的schedule设为0 13 * * 0(每周日13点触发),脚本会自动判断当天是不是当月第一个周日,是就执行任务,否则直接退出。

内容的提问来源于stack exchange,提问作者Benbb96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:33:11