7

我正在从 supervisord 运行一个应用程序,我必须为它设置一个环境。大约有 30 个环境变量需要设置。我试过把所有东西都放在一个大

环境=

行,这似乎不起作用。我也尝试了多个 enviroment= 行,但这似乎也不起作用。我也尝试过在 env 值附近使用和不使用 ' 。

设置我的环境以使其在监督控制下保持完整的最佳方法是什么?我是否应该从预先加载了环境的 shell 脚本调用我的实际程序(龙卷风、fwiw)?理想情况下,我想将所有环境变量放入一个包含文件中并使用主管加载它们,但我愿意以另一种方式来做。

更新:

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

environment=
    PYTHONPATH=/srv/obsf/current/:$PYTHONPATH,
    PYTHON_EGG_CACHE=/srv/obfs/current/.python-eggs,
    OBFS_API_ENVIRONMENT_STAGE=test,

这持续了大约 30 行,其中包含很多环境变量。当我执行程序时,它立即崩溃并抱怨未设置环境变量 OBFS_API_ENVRIONMENT_STAGE。

4

2 回答 2

12

relevant documentation section说明您需要将变量列为逗号分隔的键/值对:

环境

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

也使用example for this section逗号:

environment = KEY1=value1,KEY2=value2

在内部这是parsed into a dict使用 python shlexlexer,所以它会正确处理引用。它还会去除空格,因此为了使内容更具可读性,您可以将内容分成多行:

environment =
    KEY1="Some longer value containing whitespace",
    KEY2=value2-on-a-new-line,

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

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

于 2012-06-04T10:21:14.660 回答
4

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

于 2012-06-08T04:23:42.210 回答