主管程序:x命令扩展环境变量$(ENV_VAR)s?

时间:2013-12-02 09:15:00

标签: supervisord

我想将配置(在本例中为站点名称)放入主管 环境变量,用于程序扩展:x命令参数。这支持吗?文档的措辞似乎表明是。

以下语法在supervisor-3.0(配置文件的摘录)中对我不起作用:

[supervisord]
environment = SITE="mysite"

[program:service_name]
command=/path/to/myprog/myservice /data/myprog/%(ENV_SITE)s/%(ENV_SITE)s.db %(program_name)s_%(process_num)03d
process_name=%(program_name)s_%(process_num)03d
numprocs=5
numprocs_start=1

引发以下错误:

sudo supervisord -c supervisord.conf                                            

Error: Format string
'/path/to/myprog/myservice /data/myprog/%(ENV_SITE)s/%(ENV_SITE)s.db %(program_name)s_%(process_num)03d'
for 'command' contains names which cannot be expanded

阅读文档,我希望环境变量可用 程序中的扩展:x命令为%(ENV_VAR)s:

http://supervisord.org/configuration.html#program-x-section-values

命令:

"根据包含键的字典计算字符串表达式 group_name,host_node_name,process_num,program_name,here(目录) supervisord配置文件),以及所有supervisord的环境变量 以ENV _。"

为前缀

介绍:3.0

相关:

有一些开放式拉取请求可以在其他部分值中进行扩展:

https://github.com/Supervisor/supervisor/issues?labels=expansions&page=1&state=open

搜索goole(或SO)不会返回尝试使用%(ENV_VAR)的示例 扩展命令部分值:

https://www.google.com/search?q=supervisord+environment+expansion+in+command

2 个答案:

答案 0 :(得分:3)

我同意主管不清楚这一点(至少对我来说)。

我找到了执行/ bin / bash -c的最简单的解决方案。 在你的情况下,它将是:

    command=/bin/bash -c"/path/to/myprog/myservice /data/myprog/${SITE}/${SITE}.db ..."

您怎么看?

我在这里找到了灵感:http://blog.trifork.com/2014/03/11/using-supervisor-with-docker-to-manage-processes-supporting-image-inheritance/

答案 1 :(得分:2)

你做对了;但是,在配置加载过程中,无论出于何种原因,您的supervisord部分中定义的ENV都无法用于进程。如果你像这样开始监督:

SITE=mysite supervisord 

它将正确运行并扩展该变量。我不知道为什么supervisord在添加到环境中并将其提供给子流程时会出现问题。配置扩展。我认为环境变量在子进程中是可用的,但在子进程配置声明中扩展变量时则不可用。