Chefがサービス(postgres)を開始する可能性がありますが、その後、帯域外で停止される可能性があります。後続のChef実行でサービスを実行させたい。私はこれを試しました:
service "postgresql" do
action :start
end
しかし(up to date)
、シェフが起動したことをシェフが認識しており、停止したことを認識できないためと考えて、効果はありません。(おそらくservice ... status
このサービスでどのように動作するためですか?)これを書いた場合:
# anti-pattern warning!
execute "force-start-postgresql" do
command "service postgresql start || /etc/init.d/postgresql start"
action :run
end
私は望ましい振る舞いをします。また、action :restart
それを実行させます。ただし、これらは移植性のため(そして後者の場合は再開する前に停止する可能性があるため)、アンチパターンのように見えます。
では、Chefがすでに実行されていると考えている場合でも、サービスを強制的に開始するように指示するにはどうすればよいですか?
これは、OpsCodeによってホストされているChef 11.6とデフォルトのpostgresqlレシピを使用しています。(これは似ていますが、Chefで「最新の」リソースにアクションを強制する方法とはまったく同じではないと思いますか?)
--- 編集(jtimberlandポストに続く説明)---
-l debug
ここに示しています:
DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running
それが実行されていないときでも。だからそれは一つのバグのように聞こえます、そして私はそれに興味があります。ただし、私は主にChefに「ステータスチェックをスキップして、常にサービス開始コマンドを呼び出す」ように指示する方法があるかどうかに興味があります。それがここでの質問です。
(私は専門家だが、私はサービスが実行されていることを確認するための最もポータブルな方法は、サービスとそのほとんど常に冪等ですを開始することだと思います。大藤チェックサービスが実行されているかどうかはあまり一致しており、私たちは気にしなければならない理由は、私が表示されません!)
:start
かかわらずで:status
。また、私はそれがps -ef | grep [p]ostgresql
同様のことを望んでいます、そうでなければそれは通常それ自身のgrepコマンドと一致し、したがって常にサービスが実行されていると考えます。(または、それが根本的な問題なのでしょうか?)