0

init.d ファイルがインストールされていないサービスをインストールするためのワークフローがまったくわかりません。以下は、スーパーバイザーをインストールするための私のレシピです。また、ブーストラップのエラーの下にあります。テンプレートとしてinit.dとconfigファイルがあります。では、シェフが機能するようにロジックを調整するにはどうすればよいでしょうか。

ec2-175-41-185-174.ap-southeast-1.compute.amazonaws.com [Thu, 17 May
2012 22:18:02 +0000] ERROR: Running exception handlers
ec2-175-41-185-174.ap-southeast-1.compute.amazonaws.com [Thu, 17 May
2012 22:18:02 +0000] FATAL: Saving node information to
/var/chef/cache/failed-run-data.json
ec2-175-41-185-174.ap-southeast-1.compute.amazonaws.com [Thu, 17 May
2012 22:18:02 +0000] ERROR: Exception handlers complete
ec2-175-41-185-174.ap-southeast-1.compute.amazonaws.com [Thu, 17 May
2012 22:18:02 +0000] FATAL: Stacktrace dumped to
/var/chef/cache/chef-stacktrace.out
ec2-175-41-185-174.ap-southeast-1.compute.amazonaws.com [Thu, 17 May
2012 22:18:02 +0000] FATAL: Errno::ENOENT: service[supervisord]
(supervisor::default line 23) had an error: Errno::ENOENT: No such
file or directory - /etc/init.d/supervisord restart



easy_install_package "supervisor" do
 action :install
end

template "/etc/supervisord.conf" do
 path "/etc/supervisord.conf"
 source "supervisord.conf.erb"
 owner "root"
 group "root"
 mode "0600"
end

template "/etc/init.d/supervisord" do
 path "/etc/init.d/supervisord"
 source "supervisord.erb"
 owner "root"
 group "root"
 mode "0755"
 #notifies :start, "service[supervisord]", :immediately
end

service "supervisord" do
 supports :restart => true, :start => true, :stop => true, :reload => true
 action [ :enable]
 subscribes :start, resources(:template =>
"/etc/init.d/supervisord"), :immediately
end
4

1 に答える 1

0

ここでの問題は、notifiesおよびsubscribes属性で:immediatelyを使用したことが原因であると考えています。

:immediatelyを使用すると、通知がすぐに実行されます。これは場合によっては理にかなっていますが、この場合、Chef が実行を実行する方法が原因で、通知しているリソースまたはサブスクライブしているリソースがまだ存在しない可能性があります。

デフォルトでは、通知は: delayedです。これは、トリガーされるためにキューに入れられ、Chef 実行の最後に実行されることを意味します。その後、通知したいサービスやその他のリソースに配信できます。

上記の例では、次のように変更します。

template "/etc/supervisord.conf" do
 path "/etc/supervisord.conf"
 source "supervisord.conf.erb"
 owner "root"
 group "root"
 mode "0600"
 notifies :reload, "service[supervisord]", :delayed
end

template "/etc/init.d/supervisord" do
 path "/etc/init.d/supervisord"
 source "supervisord.erb"
 owner "root"
 group "root"
 mode "0755"
 notifies :reload, "service[supervisord]", :delayed
end

service "supervisord" do
 supports :restart => true, :start => true, :stop => true, :reload => true
 action :enable
end

上記のコードは次のことを行います。

  • Supervisord 構成ファイルを作成し、Chef の実行の最後にスーパーバイザーにリロードするよう通知します。
  • Supervisord init.d スクリプトを作成し、Chef 実行の最後にスーパーバイザーにリロードするよう通知します。
  • 再起動、開始、停止、およびリロードをサポートする Supervisord サービス リソースを宣言し、それらのいずれかが実行された後に有効にします。

Chef が実行リストと実行リスト内のクックブックを実行する方法の詳細については、The Chef Runまたはより古いものを参照してください。

于 2013-02-10T19:25:58.790 に答える