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', '=': ','}作为环境字典),因为没有严格检查等号要求.我已经提交了拉取请求来解决这个问题.