在使用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
感谢您的时间和考虑。
答案 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在寻找真实的布尔值。测试构造通过提供其退出状态来做到这一点。请牢记这一点。