无法在 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.sh
和 source 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//"
我已经设置了一个环境变量,我使用 .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.sh
和 source 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//"