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

如何优雅停止Airflow 1.9.0(Python 2.7)中的DAG?

优雅停止Airflow 1.9.0中运行缓慢的DAG

嘿,我在Airflow 1.x版本折腾过不少慢任务的问题,刚好能给你几个实用的办法,分UI和命令行两种场景来,确保既停得快又不搞乱元数据:

第一步:先暂停DAG,阻止新任务触发

首先得先把DAG暂停,不然你这边刚停掉当前任务,调度器可能又触发新的实例,白忙活。在Airflow 1.9的UI里:

  • 回到DAG列表页面,找到你那个上传文件的DAG,左边有个圆形的「暂停/启用」开关(或者顶部导航栏里的Pause DAG按钮),点击切换成暂停状态。这样调度器就不会再给这个DAG分配新的任务了。

第二步:终止正在运行的任务实例

暂停DAG只是阻止新任务,正在跑的那个慢任务还得单独处理,分两种方式:

方式一:通过UI操作(适合快速处理单个任务)

  1. 进入这个DAG的Tree View或者Graph View页面,找到那个显示为「运行中」的绿色任务节点。
  2. 点击这个节点,在弹出的任务详情页面里,你可以选择Mark as Failed或者Mark as Success——但注意,这只是更新元数据库里的任务状态,如果任务是在Celery Worker上跑的,实际进程可能还在后台运行。所以如果是CeleryExecutor,这种方法只能标记状态,还得配合命令行杀进程。

方式二:命令行操作(更可靠,适合所有Executor类型)

这是我更推荐的方式,能彻底终止任务进程:

如果你用的是CeleryExecutor

  1. 先查看当前活跃的Celery任务:
    celery -A airflow.executors.celery_executor.app inspect active
    
    输出里会找到对应DAG和任务的ID。
  2. 用revoke命令终止任务,加上--terminate参数强制停止:
    celery -A airflow.executors.celery_executor.app revoke <任务ID> --terminate
    

如果你用的是Sequential/LocalExecutor

  1. 先找到对应的Airflow任务进程:
    ps aux | grep "airflow run <你的DAG ID>"
    
    或者直接搜Python进程里的关键词,比如你处理tar文件的脚本名。
  2. 用kill命令终止进程,优先用-TERM信号让它优雅清理资源(比如关闭文件句柄),如果没反应再用-9强制杀死:
    kill -TERM <进程ID>
    # 要是TERM没效果,再用强制终止
    kill -9 <进程ID>
    

最后:验证是否彻底停止

处理完后,回到UI的任务详情页,确认任务状态变成Failed或Success,同时用ps命令再检查一遍,确保对应的进程已经消失。另外,等你修复完DAG代码后,记得把DAG重新启用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:37:02