supervisord环境变量设置应用程序

use*_*844 7 python tornado supervisord

我正在运行来自supervisord的应用程序,我必须为它设置一个环境.需要设置大约30个环境变量.我已经尝试过全力以赴

环境=

线,这似乎不起作用.我也尝试了多个环境=线,这似乎也没有用.我也尝试过使用和不使用env值.

设置环境的最佳方法是什么,以便在监督控制下保持完整?我应该从预装了环境的shell脚本调用我的实际程序(tornado,fwiw)吗?理想情况下,我想将所有环境变量放入包含文件并使用主管加载它们,但我愿意采取另一种方式.

更新:

这是我在conf文件中使用的内容:

environment=
    PYTHONPATH=/srv/obsf/current/:$PYTHONPATH,
    PYTHON_EGG_CACHE=/srv/obfs/current/.python-eggs,
    OBFS_API_ENVIRONMENT_STAGE=test,
Run Code Online (Sandbox Code Playgroud)

这持续了大约30行,有很多环境变量.当我执行程序时,它立即崩溃,抱怨没有设置环境变量OBFS_API_ENVRIONMENT_STAGE.

Mar*_*ers 12

该relevant documentation section解释说,你需要列出变量为逗号分隔键/值对:

环境

KEY = val,KEY2 = val2形式的键/值对列表,将放置在supervisord进程的环境中(因此在其所有子进程环境中).此选项可以包含值%(此处)s,它会扩展到找到supervisord配置文件的目录.请注意,子进程将继承用于启动supervisord的shell的环境变量,除了在此处和程序的环境配置节中重写的那些变量.

它example for this section也使用逗号:

environment = KEY1=value1,KEY2=value2
Run Code Online (Sandbox Code Playgroud)

在内部,这是parsed into a dict使用python shlexlexer,因此它将正确处理引用.它还会剥离空白,所以为了使事物更具可读性,你可以将事物分成多行:

environment =
    KEY1="Some longer value containing whitespace",
    KEY2=value2-on-a-new-line,
Run Code Online (Sandbox Code Playgroud)

请注意,尾随逗号是可选的; 它不会对输出产生影响.

但是在KEY1之后缺少一个逗号可能会导致奇怪的值(上面的例子,减去后面的逗号whitespace"会给你{'KEY1': 'Some longer value containing whitespace', '=': ','}作为环境字典),因为没有严格检查等号要求.我已经提交了拉取请求来解决这个问题.


use*_*844 4

事实证明,尾随逗号是一个问题。我引用了所有 env 字符串并删除了结尾的逗号。现在一切正常。