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

如何取消暂停Airflow DAG且不立即触发执行?

解决DAG取消暂停后立即执行的问题

方法1:设置catchup=False

这是最直接的解决方案,在DAG定义中添加catchup=False,可阻止Airflow在DAG转为未暂停状态时,补跑之前错过的调度周期,仅按未来的调度时间执行任务。
如果使用Dag Factory,可在配置文件中给目标DAG添加该参数:

dag_factory_config:
  dags:
    你的DAG名称:
      catchup: False
      schedule_interval: "@daily"
      # 其他DAG配置项

方法2:手动创建DagRun标记已处理周期

若需更精细控制,或不想修改DAG定义,可在激活DAG前手动创建DagRun记录,标记最近一次调度周期已处理,让Airflow不会触发立即执行。
示例Python代码(可通过Airflow CLI或脚本执行):

from airflow.models import DagRun, DAG
from airflow.utils.session import create_session
from datetime import datetime

dag_id = "你的DAG名称"
dag = DAG.get_dag(dag_id)

# 计算最近一次应调度的时间(当前时间前的一个调度周期)
last_scheduled_date = dag.previous_schedule(datetime.now())

with create_session() as session:
    # 检查是否已存在对应周期的DagRun
    existing_run = session.query(DagRun).filter(
        DagRun.dag_id == dag_id,
        DagRun.execution_date == last_scheduled_date
    ).first()
    if not existing_run:
        # 创建状态为success的DagRun,标记该周期已处理
        dag_run = DagRun(
            dag_id=dag_id,
            execution_date=last_scheduled_date,
            start_date=datetime.now(),
            state="success"
        )
        session.add(dag_run)
        session.commit()

# 取消DAG暂停状态
dag.set_is_paused(is_paused=False)

方法3:全局禁用默认补跑(谨慎使用)

若要全局控制所有新DAG的行为,可修改airflow.cfg中的catchup_by_default参数为False,这样所有新创建的DAG默认会开启catchup=False。但此为全局设置,可能影响其他业务DAG,需谨慎操作:

[core]
catchup_by_default = False

关于is_active=False无效的说明

is_active与DAG的暂停状态(is_paused)是独立的两个配置:is_active用于控制DAG是否被调度器识别,而你需要的是取消暂停后不立即执行,因此修改该参数无法解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:35:53