我正在从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。
答案 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字符串并删除了尾随逗号。现在一切都有效。