2017-08-30 1 views
0

シェフの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" 

アイデアや提案は高く評価されます。

答えて

2

文字どおりに変換するには、testコマンドを使用する必要があります。通常は、[only_if "[ $(ps -ef | grep -v grep | grep service_name | wc -l) > 0 ]"という別名になります。しかし、あなたはまた、代わりにRubyコードに多少うまくこれを行うことができます:

only_if { shell_out!('ps -ef').include?('service_name') } 
+0

こんにちは、テストコマンドは正常に動作します、ありがとうございます。しかし、私が2番目のコードを試してみると、私はこのエラーを受け取ります: "NoMethodError:未定義メソッド' include? ' for# "事前にメソッドを宣言する必要はありますか? – EdTed

0

あなたがあなたのonly_ifnot_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 

警告:私はこれをテストしていないので、おそらくバグがあります。

関連する問題