无法在 Ubuntu 上读取 Python 中的环境变量

Cannot read environment variable in Python on Ubuntu

我已经设置了一个环境变量,我使用 .sh 文件在本地执行:

.sh file:
#!/bin/sh
echo "environment variables"
export BROKER="amqp://admin:password@11.11.11.11:4672//"

在本地 虚拟环境中 我现在可以在 Python 中阅读此内容,使用:

BROKER = os.environ['BROKER']

但是,在我的生产服务器上 (Ubuntu)。我 运行 相同的文件 chmod +x name_of_file.shsource settings.sh 并且可以使用 printenv 查看变量,但是 Python 给出错误 KeyError: 'BROKER' 为什么?

这只发生在我的生产机器上,尽管我可以使用 printenv 看到变量。注意我的生产机器不使用 virtualenv。

如果我在 Ubuntu 上 运行 python shell 并执行 os.environ['BROKER'] 它会打印出正确的值。所以我不知道应用程序文件找不到它。

这是获取运行找不到变量的任务(主管任务)

[program:celery]
directory = /srv/app_test/
command=celery -A tasks worker -l info
stdout_logfile = /var/log/celeryd_.log
autostart=true
autorestart=true
startsecs=5
stopwaitsecs = 600
killasgroup=true
priority=998
user=ubuntu

Celery Config(在supervisor下执行时没有找到变量:

from kombu import Exchange, Queue
import os

# Celery Settings

BROKER = os.environ['BROKER']

当我重新启动 supervisor 时,它给出了密钥错误。

您shell的环境变量将不会在主管任务中可见。

您需要在主管配置中使用 environment 设置:

[program:celery]
...
environment=BROKER="amqp://admin:password@11.11.11.11:4672//"

这需要supervisor 3.0+.