我是Airflow的新手,并且与BashOperator苦苦挣扎。我想在dag.py中使用bash操作符访问shell脚本。
我检查了: How to run bash script file in Airflow 和 BashOperator 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位置而不是我提供的路径中搜索。但是,如何使它搜索正确的路径。
答案 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
)