我正在使用 cfengine 启动 foobar 进程。显然,当我使用 process_select 时 LHS 会被丢弃?我是否可以简单地将 LHS 传递给函数,而不必将命令匹配模式放在 body 参数中?
我只想匹配foobar
属于特定用户的进程,因为另一个用户可以轻松运行foobar
进行测试。
bundle agent foobar {
processes:
"foobar" # documented way would be to use .* here
process_select => command("foobar"),
restart_class => start_foobar;
commands:
start_foobar::
"/usr/bin/foobar";
}
body process_select command(c) {
command => "$(c)";
process_result => "command";
}
答案1
process_select
据我所知,如果您只是想寻找“foobar”进程,您根本不需要使用该功能。
你不能这么做吗?
processes:
"foobar"
restart_class => start_foobar;
如果您还需要同时匹配其他条件,例如按照您的建议运行它的用户,我建议使用如下变量:
vars:
"program" string => "foobar";
或者更好的是,编写一个带有一些参数的包,如下所示:
bundle agent restart(program, path) {
processes:
"${program}" # documented way would be to use .* here
process_select => command("${program}"),
restart_class => start_foobar;
commands:
start_foobar::
"${path}/${program}";
}
body process_select command(c) {
command => "$(c)";
process_result => "command";
}
然后只需将该包调用为 restart(“foobar”、“/usr/bin”)。
我还没有测试上面的代码,你可能需要对其进行调整!