使用Puppet进行安装之前,请检查服务是否正在运行

时间:2019-01-02 16:13:19

标签: bash puppet puppet-enterprise

在使用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 :(得分:1)

此错误消息...

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

表示shell尝试将'3'作为命令执行,并且毫不奇怪,没有找到它。在您提供的代码中,此类问题的唯一可能原因是您的Exec的{​​{1}}命令:

unless

当该命令由外壳执行时,它首先执行

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

在子shell中并捕获其标准输出。对该输出进行了一些清理,然后将其替换为总体命令以产生

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

,然后shell尝试使用两个参数将其作为命令'3'执行。要将其作为条件表达式进行评估,您需要将其作为3 -eq 3 test或类似参数的参数来表示:

[

答案 1 :(得分:0)

  

除非=>“ ps -eaf | grep service | grep -v grep | wc -l -eq 3”

除了其他问题,您还有语法错误:-eq 3不是有效的命令。如果要评估 sh 中shell命令的输出,则需要使用测试构造。例如:

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

从广义上讲,unless statement在寻找真实的布尔值。测试构造通过提供其退出状态来做到这一点。请牢记这一点。