1

私は2つのことを達成したいと思います:1)無意味なpidファイルをクリーンアップして(elasticsearchが実行されていない場合)、それを開始します。2)続行する前にESが起動したことを確認します。

Chefがすぐに提供するものとRubyが許可するものの間で、それを実現するための構文のような擬似コードしか理解できませんが、実行されないので、本物を書くためのヘルプ/アドバイスが必要です。

(1)の擬似コード:

bash "start it up" do
    user "root"
    only_if { # pretty sure this syntax is all incorrect, any ideas to make it happen?
        (sudo service elasticsearch status).match(/^elasticsearch not running/)
    }
    code <<-EOS
        sudo rm -rf /usr/local/var/run/elasticsearch/*.pid
        sudo service elasticsearch restart
    EOS
end

(2)の擬似コード:

bash "wait for it to start up" do
    user "root"
    only_if { # pretty sure this syntax is all incorrect, any ideas to make it happen?
        (sudo service elasticsearch status).match(/^elasticsearch  running with PID/)
    }
    retries 20
    retry_delay 5
    code <<-EOS
        echo "I can now go on with my life..."
    EOS
end
4

1 に答える 1

0

続行する前に特定のステータスを確認したい場合は、これをレシピに挿入します(これは例であり、テストされていません)。

service "elasticsearch" do
  action [ :enable, :start ]
  status_command "/usr/sbin/service elasticsearch status | grep 'running with PID'" 
end

startサービスが実際に開始されるのを待つのは、initスクリプトのコマンドの仕事です。

シェフのドキュメントによると:

サービスリソースがstart_command属性を直接公開するため、executeリソースを使用してサービスを制御する理由はありません。これにより、レシピは、よりクリーンでより直接的な方法で発行されたコマンドを完全に制御できます。

于 2014-03-13T17:46:55.533 に答える