Проверьте, запущена ли служба перед установкой с помощью Puppet - PullRequest
0 голосов
/ 02 января 2019

Мне нужно проверить, запущена ли уже служба, прежде чем устанавливать ее с помощью puppet.

Мой код выглядит следующим образом, но он продолжает давать сбой.

exec {  'bud_sh':
cwd      => '/working_dir/',
command  => "Some Command",
path     => '/usr/bin:/usr/sbin:/bin:/usr/local/bin',
provider => 'shell',
onlyif   => "test -f /path/to/shell/script/exist",
unless  =>  "`ps -eaf | grep service | grep -v grep | wc -l` -eq 3"

}

Ниже приводится сообщение об ошибке.

 Could not evaluate: /bin/sh: 3: command not found 

Цените ваше время и внимание по этому вопросу.

Ответы [ 2 ]

0 голосов
/ 05 января 2019

если => "ps -eaf | grep service | grep -v grep | wc -l -eq 3"

Помимо других проблем, у вас есть синтаксическая ошибка: -eq 3 - недопустимая команда. Если вы хотите оценить вывод команды оболочки в sh , вам нужно использовать тестовую конструкцию. Например:

unless => '[ "$(ps -eaf | grep service | grep -v grep | wc -l)" -eq 3 ]'

На более широком уровне оператор , если только оператор не ищет истинное логическое значение. Тестовая конструкция делает это, предоставляя свой статус выхода. Запишите свои заявления с учетом этого.

0 голосов
/ 05 января 2019

Это сообщение об ошибке ...

Could not evaluate: /bin/sh: 3: command not found

указывает, что оболочка пыталась выполнить '3' как команду и, что неудивительно, не нашла ее.Единственный вероятный источник такой проблемы в представленном вами коде - ваша Exec 's unless команда:

unless  =>  "`ps -eaf | grep service | grep -v grep | wc -l` -eq 3"

Когда команда выполняется оболочкой,сначала он выполняет

ps -eaf | grep service | grep -v grep | wc -l

в подоболочке и записывает свой стандартный вывод.Эти выходные данные немного очищаются, а затем подставляются в общую команду для получения, по-видимому,

3 -eq 3

, которую оболочка затем пытается выполнить как команду '3' с двумя аргументами.Чтобы вместо этого оценить его как условное выражение, вам необходимо представить его в качестве аргументов test или [ или аналогичных:

unless  =>  "test `ps -eaf | grep service | grep -v grep | wc -l` -eq 3"
...