如何在Airflow的DAG中实现任务顺序执行且失败后不中断
Airflow DAG实现任务顺序执行且忽略前序失败的方案
要实现前序任务失败时后续任务仍能继续执行的顺序任务流,核心是利用Airflow的trigger_rule参数,将后续任务的触发规则设置为all_done(表示只要前序任务完成,无论成功或失败,都触发当前任务)。
完整代码示例
from airflow import DAG from airflow.operators.bash import BashOperator from datetime import datetime default_args = { 'owner': 'airflow', 'start_date': datetime(2024, 1, 1), } with DAG( dag_id='sequential_ignore_failure_dag', default_args=default_args, schedule_interval='@daily', catchup=False ) as dag: # 第一个任务,模拟执行失败 task1 = BashOperator( task_id='task1', bash_command='echo "Running Task 1"; exit 1' ) # 第二个任务,设置触发规则为all_done task2 = BashOperator( task_id='task2', bash_command='echo "Running Task 2"', trigger_rule='all_done' ) # 第三个任务,同样设置触发规则为all_done task3 = BashOperator( task_id='task3', bash_command='echo "Running Task 3"', trigger_rule='all_done' ) # 定义顺序依赖关系 task1 >> task2 >> task3
关键参数说明
trigger_rule='all_done':这是实现需求的核心。Airflow默认触发规则为all_success(仅当前序所有任务成功才触发),而all_done会忽略前序任务的执行状态,只要前序任务执行完成(无论成功、失败、跳过),就会触发当前任务。- 若你有更复杂的任务分支场景,可根据需求选择其他触发规则(比如
none_failed),但针对"无论前序是否失败都执行后续"的场景,all_done是最优选择。
执行效果
当task1执行失败时,task2依然会被触发执行,完成后task3也会正常启动,完全匹配你预期的任务流效果。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

