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

时间:2015-02-22 14:57:31

标签: python python-2.7 environment-variables celery

我已经设置了一个环境变量,我使用.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'],它会打印出正确的值。所以我不知道app文件找不到它。

这是无法找到变量的运行任务(主管任务)

[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(在主管下执行时找不到变量:

from kombu import Exchange, Queue
import os

# Celery Settings

BROKER = os.environ['BROKER']

当我重新启动主管时,它会给出关键错误。

1 个答案:

答案 0 :(得分:2)

来自shell的环境变量在主管任务中可见。

您需要在超级用户配置中使用environment设置:

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

这需要supervisor 3.0+.