我可以将 cfengine3 processes: 行的 LHS 传递到 RHS 吗?

我可以将 cfengine3 processes: 行的 LHS 传递到 RHS 吗?

我正在使用 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”)。

我还没有测试上面的代码,你可能需要对其进行调整!

相关内容