监控程序:如何扩展环境变量$(ENV_VAR)s的X命令?

30
我想将配置(在本例中是站点名称)放入supervisor环境变量中,以便在程序: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

阅读文档后,我期望环境变量可以在程序的命令中作为%(ENV_VAR)s进行扩展:

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

命令:

"字符串表达式根据包含以下键的字典进行评估: group_name、host_node_name、process_num、program_name、here(supervisord配置文件的目录)和所有以ENV_为前缀的supervisord环境变量。"

引入版本: 3.0

相关:

有开放的拉取请求可在其他部分值中启用扩展:

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

在Google (或SO) 中搜索未返回尝试在命令部分值中使用%(ENV_VAR)s扩展的示例:

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

2个回答

5

3

您做得很对,但是在配置加载期间,您 supervisord 部分定义的 ENV 却无法为进程提供可用性。如果您按以下方式启动 supervisord:

SITE=mysite supervisord 

它将正确运行并扩展那个变量。我不知道为什么Supervisord在添加到环境并使其对子进程的配置扩展可用方面存在问题。我认为环境变量在子进程内部可用,但在扩展子进程配置声明中的变量时不可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接