Vla*_*ghe 5 bash airflow google-cloud-composer
我有几个存储在文件中的多用途 shell 脚本.sh。我的目的是在 Cloud Composer 上构建一些利用这些脚本的 Airflow DAG。DAG 主要由使用特定参数调用脚本的 BashOperator 组成。
这是一个简单的例子greeter.sh:
#!/bin/bash
echo "Hello, $1!"
Run Code Online (Sandbox Code Playgroud)
我可以像这样在本地运行它:
bash greeter.sh world
> Hello, world!
Run Code Online (Sandbox Code Playgroud)
我们来写一个简单的 DAG:
#!/bin/bash
echo "Hello, $1!"
Run Code Online (Sandbox Code Playgroud)
但是脚本该放在哪里呢greeter.sh?我尝试将它放在dags/文件夹和data/文件夹中,放在第一级或嵌套在dependencies/目录中。我也尝试将地址写为./greeter.sh. 毫无意义:我永远找不到该文件。
我还尝试使用sh代替bash,但出现了不同的错误:sh: 0: Can't open greeter.sh。但是当文件不存在时也会出现此错误,所以这是同样的问题。与任何尝试运行相同chmod +rx。
如何使我的文件可供 Airflow 使用?
这个问题的评论揭晓了答案。
的地址dags_folder存储在DAGS_FOLDER环境变量中。
要获取存储在以下位置的脚本的正确地址dags_folder/:
import os
DAGS_FOLDER = os.environ["DAGS_FOLDER"]
file = f"{DAGS_FOLDER}/greeter.sh"
Run Code Online (Sandbox Code Playgroud)