首页 > 解决方案 > DAG 从 Web 界面执行 OK,但在通过命令行运行时“失败”

问题描述

我正在尝试在开发新功能期间使用命令行界面测试我的 DAG,但我无法做到这一点。我的 DAG,DAG_ID=sample_dag,文件:sample_dag.py 位于 ~/airflow/dags 文件夹(Ubuntu)中,可以通过 Web 界面执行(通过单击播放图标)。DAG 中有几个 BASH OPERATOR 调用,每个脚本都正确执行,生成日志输出。

但是,我无法通过命令行访问相同的 DAG 功能,从同一个文件夹运行,例如:airflow render sample_dag all 2019-01-14T06:04:05

上述命令的输出是:Test Dag Begin Test Dag End ****airflow.exceptions.AirflowException: dag_id could not be found: sample_dag。dag 不存在或无法解析。****

执行 DAG 中的调试打印,但不调用 Bash 脚本(不生成脚本日志)。

import datetime as dt
from airflow import DAG
from airflow.operators.bash_operator import BashOperator

default_args = {
    'owner': 'airflow',
    'start_date': dt.datetime(2019, 1, 12),
    'retries': 1,
    'retry_delay': dt.timedelta(minutes=5),
    'email_on_failure': False,
    'email_on_retry': False,
}

dag = DAG('sample_dag', default_args=default_args, schedule_interval=None)

t0 = BashOperator(
    task_id='all', bash_command='echo "Starting Tests..."', dag=dag)

t1 = BashOperator(
    task_id='test_1',
    bash_command='python3 /home/ubuntu/scripts/test_1.py &>> /home/ubuntu/scripts/test.log',
    dag=dag)

t2 = BashOperator(
    task_id='test_2',
    bash_command='python3 /home/ubuntu/scripts/test_2.py &>> /home/ubuntu/scripts/test.log',
    dag=dag)

t3 = BashOperator(
    task_id='final', bash_command='echo "Client Profile Tests Complete"', dag=dag)

print("Test Dag Begin")

t0 >> t1
t0 >> t2
t1 >> t3
t2 >> t3

print("Test Dag End")

标签: exceptionrenderairflowdirected-acyclic-graphs

解决方案


airflow rendercli 命令仅呈现模板化的运算符的参数。它不会运行你的 DAG。

airflow render [-h] [-sd SUBDIR] dag_id task_id execution_date

你应该使用trigger_dagcli 来运行你的 dag


推荐阅读