supervisord环境变量设置应用程序

时间:2012-06-04 09:49:23

标签: 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,

大约有30行,包含很多环境变量。当我执行程序时,它会立即崩溃,抱怨没有设置环境变量OBFS_API_ENVRIONMENT_STAGE。

2 个答案:

答案 0 :(得分:10)

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

  

环境

     

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

example for this section也使用逗号:

environment = KEY1=value1,KEY2=value2

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

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

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

在KEY1之后缺少逗号会导致奇怪的值(上面的例子,减去whitespace"之后的逗号会给你{'KEY1': 'Some longer value containing whitespace', '=': ','}作为环境字典)因为等号要求不严格检查。我submitted a pull request要解决这个问题。

答案 1 :(得分:4)

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