web-dev-qa-db-ja.com

Chefを使用してサービスが実行されていることを確認するにはどうすればよいですか?

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レシピを使用しています。 (これは似ていますが、 シェフの「最新」のリソースにアクションを強制する方法とはまったく同じではないと思いますか? 。)

---[〜#〜] edit [〜#〜](jtimberland投稿に続く説明)---

ここの-l debugは以下を示しています:

DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running

それが実行されていないときでも。だからそれは一つのバグのように聞こえ、私はそれに興味があります。ただし、私は主にChefに「ステータスチェックをスキップして常にサービス開始コマンドを呼び出す」ように指示する方法があるかどうかに関心があります。それがここでの質問です。

(私は専門家ではありませんが、サービスが実行されていることを確認する最もポータブルな方法はサービスを開始することであり、それはほぼ常にべき等です。OTOHcheckingサービスが実行されているかどうかは一貫性が低く、なぜ気にする必要があるのか​​わかりません!)

10
Partly Cloudy

デフォルトでは、Chefはサービスが実行されているかどうかを確認し、サービスが実行されていない場合は開始します。

サービスが実行されていると判断する方法は異なります。

デフォルトでは、Chefはpostgresqlを使用して、プロセステーブル内のサービスの名前(ここではps)を照合しようとします。

ps -ef | grep postgresql

本質的に。サービスの名前は、プロセステーブルを検査するときにパターンマッチに使用されます。これは、特にプラットフォームと「postgresql」サービスの命名方法に応じて、必要な場合と必要でない場合があります。

ただし、サービスが「ステータス」コマンドをサポートしていることをChefに伝えることができます。つまり、Chefは通常、次のようなことを行います。

/etc/init.d/postgresql status

そして、戻りコードを使用して、それが実行されているかどうかを判別します(ゼロ以外は実行されていません)。

すべてのサービススクリプトがステータスコマンドをサポートするわけではないので(デフォルトで)、シェフはこれを行いません。それは正気なデフォルトのことをしようとしますが、時にはナイーブです。したがって、リソースにステータスコマンドがあり、それほどナイーブではないことをChefに伝えることができます。

service "postgresql" do
  supports :status => true
  action :start
end

ここで、サービスの名前が「postgresql」ではなく、「postgresql-92」などの場合、次のように実行できます。

service "postgresql-92" do
  supports :status => true
  action :start
end

または

service "postgresql" do
  service_name "postgresql-92"
  supports :status => true
  action :start
end

デバッグ出力を使用してchefを実行することにより、何が起こっているかをさらに詳しく知ることができます。

chef-client -l debug
11
jtimberman