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

如何编写cron表达式实现周六21点至周日4点每小时运行任务

问题根因

你写的0 21-23,0-4 * * 6-0无效,核心是对cron规则存在两个关键误解:

  • 标准cron语法中,所有字段的数值范围必须按从小到大的顺序书写,不支持倒序跨边界匹配。星期字段里6代表周六、0代表周日,6-0属于起始值大于结束值的倒序范围,会直接被判定为非法表达式。
  • cron的多字段匹配是独立的「与」逻辑,就算你把星期字段改成6,0同时匹配周六和周日,搭配21-23,0-4的小时范围,会额外触发周六00:00-04:00、周日21:00-23:00的任务,完全不符合调度要求。
正确实现方案

你的需求本质是覆盖两个独立的时间窗口,没有办法用单个标准cron表达式精准实现,在Airflow中推荐用以下方式配置:

方案1:使用cron列表(Airflow 2.2+ 原生支持,最推荐)

Airflow 2.2及以上版本支持直接传入cron表达式列表作为调度间隔,列表内任意一个表达式匹配到时间点就会触发任务,可读性和维护性最高:

schedule_interval = [
    "0 21-23 * * 6",  # 匹配每周六21:00、22:00、23:00
    "0 0-4 * * 0"     # 匹配每周日00:00、01:00、02:00、03:00、04:00
]

这个配置完全覆盖你列出的所有执行时间点:周日04:00的任务执行完成后,下一个匹配到的时间点就是下一周周六的21:00,刚好符合轮次要求,不会多触发、漏触发任务。

方案2:旧版Airflow兼容写法

如果你使用的是2.2之前的旧版本Airflow,不支持cron列表配置,可以通过自定义Timetable的方式实现上述调度逻辑,不建议为了凑单个cron表达式写出有歧义、容易误触发的配置。

注意不要使用网上流传的0 21-4 * * 6,0这类错误写法,小时字段写21-4同样是倒序范围,会直接被判定为无效表达式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:09:37