【问题标题】:Skip run if DAG is already running如果 DAG 已在运行,则跳过运行
【发布时间】:2019-11-03 10:39:00
【问题描述】:

我有一个 DAG,我只需要同时运行一个实例。为了解决这个问题,我使用 max_active_runs=1 可以正常工作:

dag_args = {
    'owner': 'Owner',
    'depends_on_past': False,
    'start_date': datetime(2018, 01, 1, 12, 00),
    'email_on_failure': False
}

sched = timedelta(hours=1)
dag = DAG(job_id, default_args=dag_args, schedule_interval=sched, max_active_runs=1)

问题是:

当 DAG 将被触发并且有一个实例正在运行时,AirFlow 会等待此运行完成,然后再次触发 DAG。

我的问题是:

在这种情况下,有什么方法可以跳过此运行,使 DAG 在此执行后不会运行?

谢谢!

【问题讨论】:

  • 您可以在您的 dag 中放置一个任务,它会检查气流数据库的 dag_run 表中是否有任何具有相同 dag_id 且状态为“正在运行”的 dag,如果有两个实例正在运行相同dag 你可以让 dag 失败。
  • @ShahbazAli 这是个好主意!但是我怎样才能找到 DAG ID 以及如何查询呢?谢谢!
  • 请注意,它们没有一起运行,因为我将 max_active_runs 设置为 1。AirFlow 只是保持触发器直到前一个完成。
  • 我可以尝试这样的事情,但不确定这是否是解决此问题的最佳方法:*.com/questions/43732642/…

标签: airflow airflow-scheduler


【解决方案1】:

这只是检查docs,但看起来你只需要添加另一个参数:

catchup=False

catchup (bool) – 执行调度程序追赶(或仅运行最新)? 默认为真

【讨论】: