2012-05-18 22 views
0

我完全没有获得安装 init.d文件没有安装服务的工作流程。以下是我的主管安装 的秘诀。还在下面的boostrap错误。我有init.d 和配置文件作为模板。那么,我如何调整逻辑来让 厨师工作?厨师 - 当模板资源被修改时无法配置服务资源重新加载

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 
+0

我的答案中,我错过了任何情况吗?我能做些什么来改善它? –

+0

您是否找到解决此问题的解决方案?请不要忘记标记答案是正确的! :) – sethvargo

回答

0

我相信你的问题在这里是由于您使用的:在您的立即通知订阅属性。

当您使用立即通知立即运行,这在某些情况下是有意义的,但在这种情况下,由于Chef如何执行,您通知或您要订阅的资源可能尚不存在。

默认情况下,notifications are:延迟这意味着它们排队等待触发并在Chef运行结束时执行。然后他们可以交付到您想要通知的services和其他资源。

对于你上面的例子,我会修改如下事情:

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配置文件,然后通知supervisord在年底重装厨师跑
  • 创建supervisord init.d脚本,然后通知supervisord在厨师跑完后重新加载
  • Dec拉雷斯的supervisord服务资源,支持重新启动,启动,停止,并重新加载,并使其后的任何那些已经运行

的见The Chef Run或上了年纪,但在某些方面更清晰Anatomy of a Chef Run的更多信息,如何厨师在运行列表中执行运行列表和食谱。