Airflow DAG未按指定时间自动触发问题求助
先看你提供的代码,首先存在语法错误:DAG定义的最后缺少闭合括号),这会直接导致Airflow无法加载这个DAG,先补上这个括号:
DAG = DAG( dag_id='ietl_tv3_redge_devices', default_args=ARGS, schedule_interval= '30 7 * * *', max_active_runs=1 ) # 补充缺失的闭合括号
除此之外,还有以下常见原因需要逐一排查:
导入语句缺失:代码中用到了
DAG、timedelta、airflow.utils.dates.days_ago,但未显示导入逻辑。如果没有导入这些模块,DAG会加载失败,需确保代码开头包含:from airflow import DAG from datetime import timedelta import airflow.utils.dates动态start_date的问题:你使用
airflow.utils.dates.days_ago(1)作为起始日期,这是动态生成的时间,每次调度器解析DAG时该日期都会变化。Airflow的调度逻辑基于start_date + schedule_interval计算首次执行时间,动态start_date会导致调度器无法正确判断执行窗口,建议改为固定日期:'start_date': datetime(2024, 5, 20), # 替换为早于当前时间的固定起始日期(使用前需导入
from datetime import datetime)时区不匹配:Airflow默认使用UTC时区,如果你设置的
30 7 * * *是本地时间(如北京时间),实际触发时间会和预期有偏差。可以在DAG定义中指定时区:DAG = DAG( dag_id='ietl_tv3_redge_devices', default_args=ARGS, schedule_interval= '30 7 * * *', max_active_runs=1, timezone='Asia/Shanghai' # 替换为你的本地时区 )DAG处于暂停状态:登录Airflow UI,检查该DAG的状态是否为“已启用”,若处于暂停状态,调度器不会触发执行。
调度器未正常运行:确认Airflow调度器服务是否在运行,比如通过
systemctl status airflow-scheduler(systemd环境)或查看容器日志(Docker部署),调度器停摆会导致所有DAG无法触发。执行窗口已错过:如果start_date设为
days_ago(1)且当前时间已过当天07:30 UTC,Airflow会等到下一个周期才触发。例如你在当天10点UTC部署DAG,首次执行会是次日07:30 UTC。日志排查:查看Airflow调度器或webserver日志,搜索DAG ID
ietl_tv3_redge_devices,加载失败、调度异常的报错信息会直接指向问题根源。
内容的提问来源于stack exchange,提问作者DariusB

