我必须运行同一个应用的多个实例,但设置略有不同。唯一改变的是一个命令行参数。
所以目前我得到的脚本看起来像这样:
[program:thing-one]
command=/usr/local/thing --instance one
user=a_user
stdout_logfile=/var/log/thing.log
autostart=true
autorestart=true
startsecs=10
redirect_stderr=true
directory=/
startretries=1000
[program:thing-two]
command=/usr/local/thing --instance two
user=a_user
stdout_logfile=/var/log/thing.log
autostart=true
autorestart=true
startsecs=10
redirect_stderr=true
directory=/
startretries=1000
[program:thing-three]
command=/usr/local/thing --instance three
user=a_user
stdout_logfile=/var/log/thing.log
autostart=true
autorestart=true
startsecs=10
redirect_stderr=true
directory=/
startretries=1000
如何避免重复相同的设置?
答案1
由于同一程序只有三个实例,且仅在一个参数上有所不同,因此我们可以command
像下面这样使用 Python 的字符串表达式扩展。
[program:things]
command=/usr/local/thing --instance %(process_num)s
numprocs=3
user=a_user
stdout_logfile=/var/log/thing.log
autostart=true
autorestart=true
startsecs=10
redirect_stderr=true
directory=/
startretries=1000
相对于你的配置,我改了两行,加了一行。
而且,文档说你必须包括上述扩展如果您使用numprocs
> 1。
答案2
我怀疑这不是您想要的,但根据您的最终目标,您可以使用脚本来生成配置。我是系统管理员,不是开发人员,所以请原谅我糟糕的编码习惯。但这允许您只添加一行来添加新应用程序。如果您想更改任何现有指令,您也只需在一个地方执行一次并重新运行脚本。
#!/usr/bin/env python
config = "/etc/supervisor/conf.d/my.conf"
f = open(config, 'w')
apps=[
('thing-one','one'),
('thing-two','two'),
('thing-three','three')
]
for name, instance in apps:
line1 = "[program:%s]\n" % name
line2 = "command=/usr/local/thing --instance %s\n" % instance
line3 = "user=a_user\n"
line4 = "stdout_logfile=/var/log/thing.log\n"
line5 = "autostart=true\n"
line6 = "autorestart=true\n"
line7 = "startsecs=10\n"
line8 = "redirect_stderr=true\n"
line9 = "directory=/\n"
line10 = "startretries=1000\n\n"
f.writelines([line1, line2, line3, line4, line5, line6, line7, line8, line9, line10])
答案3
使用 sed 同时编辑它们。
sed -i -e 's/numprocs=3/numprocs=4/g' your_conf.conf
或者如果使用 vi shift+V+G
,shift+:+g/numprocs=3/s//numprocs=4/g
也许这不是直接的答案,但在管理中,最好将每个 [program:] 块保存在单独的文件 thing-one.conf、thing-two.conf、thing-three.conf 中。
如果您想要关闭一个实例,请mv thing-two.conf thing-two.conf_off
永久删除它。将相似的实例保存在单独的文件中会更容易。
这只是我的一点小经验。