Назад | Перейти на главную страницу

Могу ли я передать левую часть cfengine3cesses: line в правую?

Я использую cfengine для запуска процесса foobar. Очевидно, LHS отбрасывается, когда я использую process_select? Могу ли я просто передать LHS функции вместо того, чтобы помещать шаблон соответствия команды в аргумент тела?

Я хотел только совпадать 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";
}

Насколько мне известно, если вы просто хотите найти процесс "foobar", вам не нужно использовать process_select особенность вообще.

Разве ты не можешь просто сделать это?

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»).

Я не тестировал приведенный выше код, возможно, вам придется его настроить!