主管和环境变量


75

我真的不知道如何让主管使用环境变量。

以下是配置代码段。

[program:htNotificationService]
priority=2
#autostart=true
#autorestart=true
directory=/home/ubuntu/workspace/htFrontEnd/heythat/htsite
command = /usr/bin/python htNotificationService.py -service
stdout_logfile=/var/log/heythat/htNotificationService.log
redirect_stderr=true
environment=PATH=/home/ubuntu/workspace/htFrontEnd/heythat
stopsignal=QUIT

我尝试了以下方法:

environment=PATH=/home/ubuntu/workspace/htFrontEnd/heythat
environment=PYTHONPATH=$PYTHONPATH:/home/ubuntu/workspace/htFrontEnd/heythat
environment=PATH=/home/ubuntu/workspace/htFrontEnd/heythat,PYTHONPATH=$PYTHONPATH:/home/ubuntu/workspace/htFrontEnd/heythat

当我启动主管时,我得到

htNotificationService: ERROR (abnormal termination)

我可以通过设置python路径从外壳开始,但不能从超级用户开始。在日志中,我收到一条错误消息,指出找不到导入。好吧,如果主管可以工作,那就可以解决。我什至在/ etc / environments中有路径?

主管为什么不工作?


3
你有没有解决这个问题?
Shane Reustle

Answers:


107

引用现有的环境变量是通过%(ENV_VARNAME)s完成的

(参见https://github.com/Supervisor/supervisor/blob/master/supervisor/skel/sample.conf

设置多个环境变量是通过用逗号分隔它们来完成的

(请参阅http://supervisord.org/subprocess.html#subprocess-environment

尝试:

environment=PYTHONPATH=/opt/mypypath:%(ENV_PYTHONPATH)s,PATH=/opt/mypath:%(ENV_PATH)s

2
这些环境变量名称是否在同一清单文件中?还是可以在bash中扩展变量名?
Panshul

我不明白任何一个问题..您指的是什么清单文件?你能举一个你在想什么的例子吗?
eatableEnergy 2015年

1
所以每个env变量都以ENV_为前缀?怪异
亚历山大·米尔斯

33

在主管块下的.conf文件中,您可以这样添加所有环境key = value对

[supervisord]
environment=CELERY_BROKER_URL="amqp://guest:guest@127.0.0.1:5672//",FLASK_CONFIG="TESTING"

[program:celeryd]
command=celery worker -A celery --loglevel=info -P gevent -c 1000

如果您不想对变量进行硬编码,但想从os环境中提取变量,请执行bash上的步骤1

导出环境变量

>> sudo export CELERY_BROKER_URL="amqp://guest:guest@127.0.0.1:5672//"

重装重击

>> . ~/.bashrc

检查环境变量是否设置正确

>> env

现在将conf文件修改为读取-注意:在ENV变量前添加ENV_

[supervisord]
environment=CELERY_BROKER_URL="%(ENV_CELERY_BROKER_URL)s",FLASK_CONFIG="%(ENV_FLASK_CONFIG)s"

[program:celeryd]
command=celery worker -A celery --loglevel=info -P gevent -c 1000

4
好答案。这些小变化是重要的变化。
乔治席尔瓦

请记住,只有supervisord在启动过程时设置了环境变量,才能依赖环境变量。
villasv

7
它不能正常工作:<class'xmlrpclib.Fault'>,<Fault 92:“ CANT_REREAD:'supervisord.environment'的格式字符串'PROJECT_ENV =%(ENV_PROJECT_ENV)s'包含名称('ENV_PROJECT_ENV'),不能为可用名称:ENV_LANG,ENV_PATH,此处“>:文件:/usr/lib/python2.7/xmlrpclib.py行:800
wyx

同样,对上述扩展问题有什么解决方案?
西蒙·梅洛亚

@ jetpackdata.com我的配置文件[supervisord] environment=CELERY_BROKER_URL="amqp://guest:guest@127.0.0.1:5672//",FLASK_CONFIG="TESTING" [program:test_process] command=python -u test.py directory=/home/dinesh stdout_logfile=/home/dinesh/test_process_output.txt redirect_stderr=true和python文件是import time count = 0 while True: count = count + 1 print(str(count) + ". This prints once every 2secs.%(ENV_FLASK_CONFIG)s") time.sleep(2)。变量未在我的文件中替换。请帮助
dinu0101

23

这对我有用。注意每行之前的标签:

environment=
    CLOUD_INSTANCE_NAME=media-server-xx-xx-xx-xx,
    CLOUD_APPLICATION=media-server,
    CLOUD_APP_COMPONENT=none,
    CLOUD_ZONE=a,
    CLOUD_REGION=b,
    CLOUD_PRIVATE_IP=none,
    CLOUD_PUBLIC_IP=xx.xx.xx.xx,
    CLOUD_PUBLIC_IPV6=xx.xx.xx.xx.xx.xx,
    CLOUD_PROVIDER=c

可以在不冲突值的情况下将相同的环境名称用于另一个应用程序吗?
Muddz '20

10

我知道这已经很老了,但我为此奋斗了几个小时,想帮下一个家伙。

更新后,请不要忘记重新加载配置文件

supervisorctl reread
supervisorctl update

2
非常感谢。我没有意识到这一点!
zarathustra

6

如果从程序包安装程序安装Supervisor,请检查使用的Supervisor版本。从2016年8月开始,您将获得3.0b2。在这种情况下,您将需要更新版本的主管。您可以通过手动安装超级用户或使用Python的pip来获得它。确保所有的相关性得以满足,与新贵设置沿着使supervisord工作作为系统启动服务和启动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.