【问题标题】:Supervisor and Environment Variables主管和环境变量
【发布时间】:2012-10-05 17:00:58
【问题描述】:

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

下面是配置sn-p。

[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

当我启动主管时,我得到 ​​p>

htNotificationService: ERROR (abnormal termination)

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

为什么主管不工作?

【问题讨论】:

  • 你有没有想过这个问题?

标签: environment-variables supervisord


【解决方案1】:

使用 %(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

【讨论】:

  • 这些环境变量名称是否在同一个清单文件中?或者也可以扩展bash中的变量名?
  • 我不明白这两个问题..你指的是什么清单文件?你能举个例子说明你的想法吗?
  • 所以每个环境变量都以 ENV_ 为前缀?奇怪的
  • 有没有办法为这些变量提供默认值?
【解决方案2】:

在 supervisord 块下的 .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//"

重新加载 Bash

>> . ~/.bashrc

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

>> env

现在修改 conf 文件以读取 - Note:在您的环境变量前面加上 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

【讨论】:

  • 很好的答案。这些小的变化是重要的。
  • 请记住,依赖环境变量只有在 supervisord 进程启动时设置才有效。
  • 无法工作错误:, :文件:/usr/lib/python2.7/xmlrpclib.py 行:800
  • 这里也一样,上面的扩展问题有什么解决方案吗?
  • @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) 。我的文件中没有替换变量。请帮忙
【解决方案3】:

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

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

【讨论】:

  • 是否可以将相同的环境名称用于另一个应用程序而不冲突值?
【解决方案4】:

我知道这已经过时了,但我只是为此苦苦挣扎了几个小时,并想帮助下一个人。

更新后别忘了重新加载配置文件

supervisorctl reread
supervisorctl update

【讨论】:

  • 非常感谢。我不知道这一点!
  • 谢谢!!!!!!
【解决方案5】:

如果您从软件包安装程序安装 Supervisor,请检查您使用的 Supervisor 版本。 从 2016 年 8 月起,您将获得 3.0b2。如果是这种情况,您将需要更新版本的主管。您可以通过手动安装 supervisor 或使用 Python 的 pip 来获得它。确保满足所有依赖项以及 upstart 设置,以便 supervisord 作为服务工作并在系统启动时启动。

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2013-10-03
    • 2017-08-09
    • 2017-09-24
    相关资源
    最近更新 更多