有没有办法在厨师中使用这个脚本(或看起来大致相同的东西)作为only_if后卫?
#!/bin/bash
application = application_name
if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
then *do something*
fi
我尝试了经典的方法,但它没有返回任何内容,因此默认情况下only_if条件通过,或者它告诉我我不能将字符串与整数进行比较(这很明显)。
execute "script" do
command "my command here"
only_if "$(ps -ef | grep -v grep | grep service_name | wc -l) > 0"
任何想法或建议都表示赞赏。
答案 0 :(得分:1)
要按字面意思转换它,您需要使用test
命令,通常别名为[
:only_if "[ $(ps -ef | grep -v grep | grep service_name | wc -l) > 0 ]"
。但是你也可以在Ruby代码中做得更好:
only_if { shell_out!('ps -ef').include?('service_name') }
答案 1 :(得分:0)
要更一般地回答这个问题,如果您想要为only_if
或not_if
后卫使用任意脚本,您可以按照以下方式执行操作:
my_guard_script = File.join Chef::Config[:file_cache_path], 'my_guard_script.sh'
file my_guard_script do
content <<- EOF
#!/bin/sh
# contents of your script here
EOF
end
resource 'my_awesome_resource' do
some_parameter 'some_value'
only_if my_guard_script
end
警告:我没有对此进行测试,因此可能存在错误。