デーモン(initスクリプトで使用される-dオプション)、またはupstart,runit/daemontoolsまたはbluepillのようなサービス管理ツールの下でchef-clientを実行できます。確かにcronから起動することもできます。デーモンモードを実行しないようにしてください:)。
シェフのリソースプロバイダは、リソースを希望の状態にするように偶発的なアクションを行います。これは、シェフが既にシステム上で稼動している場合、レシピが示すものと一致しない場合にのみリソースを変更することを意味します。たとえば、あなたがレシピを持っている場合は言うこと:
package "haproxy"
service "haproxy" do
action [:enable, :start]
end
template "/etc/haproxy/haproxy.cfg" do
source "haproxy.cfg.erb"
end
パッケージが初めてシェフの実行をインストールされ、パッケージがシステムから削除するか、リソースを変更していない限り、再び変更されることはありません。同様に、haproxyサービスは(プラットフォームのサービス管理ツールで、通常は/etc/rc*.dのシンボリックリンクで)有効になり、その後/etc/init.d/haproxy startを介して開始されます。最後に、テンプレートの内容が変更された場合にのみ、Chefは新しいバージョンのテンプレートをレンダリングします。テンプレートの場合は、SHA256チェックサムに基づいてこれを判断します。
いくつかの例外があります。実行、スクリプト、およびruby_blockリソースは、何らかの種類の修飾子を条件なしで指定することなく、冪等ではありません。
また、シェフには、サーバーの使用時に「ワンタイム」または「ワンオフ」レシピの実行リストがありません。このトピックについて最近thread on the Chef mailing listがありました。
答えをありがとう。エージェントはデーモンとして実行されています。私の質問はシェフが前に実行して正常に完了したとしても、毎回同じレシピを実行できるのですか? –