运行bashoperator时气流重置环境变量

时间:2019-08-19 04:58:04

标签: python airflow

在执行一项气流任务时,我遇到了环境变量问题。

[2019-08-19 04:51:04,603] {{bash_operator.py:127}} INFO -   File "/home/ubuntu/.pyenv/versions/3.6.7/lib/python3.6/os.py", line 669, in __getitem__
[2019-08-19 04:51:04,603] {{bash_operator.py:127}} INFO -     raise KeyError(key) from None
[2019-08-19 04:51:04,603] {{bash_operator.py:127}} INFO - KeyError: 'HOME'
[2019-08-19 04:51:04,639] {{bash_operator.py:131}} INFO - Command exited with return code 1

我的任务如下:

task_name = BashOperator(
    task_id='task_name',
    bash_command="cd path/to/manage.py && export LC_ALL=C.UTF-8 && export LANG=C.UTF-8 "
    f'&& {Variable.get("python_virtualenv_path")}virtual-env-name/bin/python manage.py command_name',
    retries=1,
    pool='LightAndFast',
    dag=dag
)

对这个问题有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这是事实,气流使用BashOperator重置环境变量,至少我遇到了这个问题。有关操作员的文档,请访问: https://airflow.apache.org/docs/stable/_modules/airflow/operators/bash_operator.html, 我找到了明确设置bash命令环境的方法,即

bash_task = BashOperator(
        task_id="bash_task",
        bash_command='echo "here is the message: \'$message\'"',
        env={'message': '{{ dag_run.conf["message"] if dag_run else "" }}'},
    )

因此,我将Bash命令的环境明确设置为:

env = os.environ.copy(),

确保早先在 dag 文件中import os。它为我解决了这个问题。

答案 1 :(得分:0)

理想情况下,您将所有环境变量作为文件放置在- /etc/default/

例如 /etc/default/airflow_vars

airflow_vars将包含您的环境变量,例如-

AIRFLOW_HOME =“安装了您的气流”

AIRFLOW_CONFIG =“您的AIRFLOW.CFG文件的位置”

PYTHONPATH =“您的常规PYTHON脚本/实用程序所在的路径”

以此类推。

如果您使用系统管理器(systemd / supervisord)-您将在 / etc / systemd / system (这是针对systemd的!)

[单位] Description =气流工作流程守护程序 之后= network-online.target cloud-config.service 需要= network-online.target

[服务] EnvironmentFile = / etc / default / airflow_vars

User =

Group =

Type = simple

WorkingDirectory =

ExecStart = <气流/箱/气流Web服务器/调度程序/工作人员的位置>

重新启动=始终

RestartSec = 5s

[安装]

WantedBy = multi-user.target

现在您的气流安装中将提供所有环境变量。

另一种方法是,只需在Admin标签,Variables选择下的UI中进行设置

这是Airflow文档上的链接,

https://airflow.readthedocs.io/en/stable/concepts.html?highlight=environmental%20variables#variables