Bash Operator错误:气流中没有此类文件或目录

时间:2018-11-01 10:54:12

标签: python bash airflow directed-acyclic-graphs

我是Airflow的新手,并且与BashOperator苦苦挣扎。我想在dag.py中使用bash操作符访问shell脚本。

我检查了: How to run bash script file in AirflowBashOperator doen't run bash file apache airflow

关于如何通过bash运算符访问shell脚本。

这就是我所做的:

 cmd = "./myfirstdag/dag/lib/script.sh "

        t_1 = BashOperator(
            task_id='start',
            bash_command=cmd
        )

在运行配方并检查气流时,出现以下错误:

[2018-11-01 10:44:05,078] {bash_operator.py:77} INFO - /tmp/airflowtmp7VmPci/startUDmFWW: line 1: ./myfirstdag/dag/lib/script.sh: No such file or directory
[2018-11-01 10:44:05,082] {bash_operator.py:80} INFO - Command exited with return code 127
[2018-11-01 10:44:05,083] {models.py:1361} ERROR - Bash command failed

不确定为什么会这样。任何帮助将不胜感激。

谢谢!

编辑注意:我假设它正在某个气流tmp位置而不是我提供的路径中搜索。但是,如何使它搜索正确的路径。

5 个答案:

答案 0 :(得分:3)

试试这个:

bash_operator = BashOperator(
    task_id = 'task',
    bash_command = '${AIRFLOW_HOME}/myfirstdag/dag/lib/script.sh '
    dag = your_dag)

答案 1 :(得分:0)

确定确定定义的路径吗?

cmd = "./myfirstdag/dag/lib/script.sh "

标题为。这表示它与您执行命令的路径有关。

您可以尝试吗?

cmd = "find . -type f"

答案 2 :(得分:0)

尝试以下方法。它必须具有bash文件的完整文件路径。

cmd = "/home/notebook/work/myfirstdag/dag/lib/script.sh "

t_1 = BashOperator(
    task_id='start',
    bash_command=cmd
)

答案 3 :(得分:0)

对于那些运行docker版本的人。

我遇到了同样的问题,花了我一段时间才意识到这个问题,但码头工人的行为可能有所不同。运行DAG时,它将移动tmp文件,如果docker上没有气流,则该文件位于同一台计算机上。在我的docker版本中,它将其移动到另一个容器中运行,当然,在运行该容器时将不会包含脚本文件。

仔细检查任务日志,您会看到在运行任务之前看到了这种情况。 这可能还取决于您的airflow-docker设置。

答案 4 :(得分:0)

尝试运行此:

path = "/home/notebook/work/myfirstdag/dag/lib/script.sh"
copy_script_cmd = 'cp ' + path + ' .;'
execute_cmd = './script.sh'

t_1 = BashOperator(
    task_id='start',
    bash_command=copy_script_cmd + execute_cmd
)