Airflow调度cron星期字段用#配置按月第N周执行任务未正常运行
问题根因及排查方案
1. 核心原因:Croniter依赖库版本不兼容
Airflow的cron表达式解析完全依赖croniter第三方库,该库仅在0.3.34及以上版本才支持#后缀的「月度第N周指定星期」调度语法。低版本croniter解析到#字符时会直接判定表达式无效,导致DAG调度逻辑不生效。
你可以执行以下命令验证部署环境的croniter版本:
pip show croniter
如果版本低于0.3.34,执行以下命令升级后重启Airflow调度器即可:
pip install -U croniter>=0.3.34
如果你的Airflow是集群部署,需要确保所有节点的croniter版本都已升级到兼容版本,否则会出现部分调度规则生效、部分不生效的异常情况。
2. 其他高频排查点
- 时区配置不匹配:Airflow默认使用UTC时区,如果你预期的执行时间是本地时区(如东八区)的12:30,实际触发时间会比预期晚8小时。你可以在DAG定义中显式指定时区避免该问题,示例如下:
with DAG( # 其他原有参数保持不变 schedule_interval='30 12 * * 1#2', start_date=datetime(2021, 8, 1, 0, 0), timezone='Asia/Shanghai' # 替换为你实际使用的时区 ) as dag: - 历史执行记录冲突:你开启了
catchup=True配置,如果对应日期的DAG运行实例已经被手动标记为成功/跳过,调度器不会重复触发该日期的任务。你可以在DAG详情页的「树视图」或「日历视图」查看对应日期的执行状态,确认是否存在已跳过的实例。 - DAG加载状态异常:部分配置无法触发的情况,可先检查Airflow调度器日志是否有对应DAG的语法报错、加载失败记录,确认DAG没有被调度器标记为无效。
内容的提问来源于stack exchange,提问作者Jose Pato
相关产品推荐
相关产品推荐

