Airflow中@once调度规则与start_date参数如何配合使用?
问题根因
你遇到的DAG未触发、next-execution为None的问题,和@once调度的逻辑直接相关:@once的规则是仅在DAG被调度器首次加载、且当前时间晚于start_date时,生成唯一一次DAG运行实例,只要该DAG曾经生成过运行实例(无论运行成功/失败/被删除),都不会再次触发,且catchup参数对@once调度完全不生效。
start_date正确配置方式
不需要使用动态的days_ago,直接设置为任意早于你当前部署时间的静态日期即可,避免动态日期带来的调度歧义,示例配置如下:
from datetime import datetime # DAG核心配置 schedule_interval='@once', start_date=datetime(2023, 1, 1), # 替换为任意早于当前时间的静态日期 catchup=False, # 对@once调度无意义,设为False减少不必要的调度干扰
触发运行操作步骤
- 进入Airflow WebUI,删除该DAG所有历史运行记录,清除调度器中该DAG已触发过的标记
- 确保DAG处于未暂停状态,重启Airflow调度器服务完成DAG重载,重载后会立即触发一次DAG运行
长驻运行配置注意事项
要保证任务启动后持续运行不被Airflow主动终止,需要额外配置两个超时参数:
- 给运行任务的Operator设置
execution_timeout=None,关闭单任务超时限制 - 给DAG本身设置
dagrun_timeout=None,关闭DAG运行整体超时限制
内容的提问来源于stack exchange,提问作者JavaTechnical
相关产品推荐
相关产品推荐

