Chef infra Chef错误-停止服务,删除与该服务相关的文件
我正在尝试编写一个upstart脚本来管理NewRelic系统监控插件(默认情况下使用init.d脚本) 我不希望这样,因为如果newrelic sysmond守护进程失败,那么我将不得不手动重新启动服务,这并不理想。另外,我一般更喜欢暴发户 以下是我的两个资源,它们来自我的食谱Chef infra Chef错误-停止服务,删除与该服务相关的文件,chef-infra,upstart,Chef Infra,Upstart,我正在尝试编写一个upstart脚本来管理NewRelic系统监控插件(默认情况下使用init.d脚本) 我不希望这样,因为如果newrelic sysmond守护进程失败,那么我将不得不手动重新启动服务,这并不理想。另外,我一般更喜欢暴发户 以下是我的两个资源,它们来自我的食谱 file "/etc/init.d/newrelic-sysmond" do action :nothing end service "newrelic-sysmond" do supports :statu
file "/etc/init.d/newrelic-sysmond" do
action :nothing
end
service "newrelic-sysmond" do
supports :status => true, :start => true, :stop => true, :restart => true
action :stop
notifies :delete, 'file[/etc/init.d/newrelic-sysmond]', :immediately
end
现在,当我运行这个配方时,我得到一个奇怪的错误,告诉我newrelic sysmond服务无法重新启动,因为/etc/init.d/newrelic sysmond
不存在
所以我的问题是,为什么在我告诉chef停止服务后,chef还要尝试重新启动服务。而且,我还希望服务“newrelic sysmond”
完成并通知文件资源,然后完成对/etc/init.d/newrelic sysmond
的删除
有什么想法吗?谢谢。有三件事。前两个只是稍微清理一下代码,第三个应该可以解决问题 首先,
:start=>true
和:stop=>true
不相关<代码>支持仅对:重新启动
、:状态
、和:重新加载
感兴趣
其次,您需要在服务资源上使用not\u if
。否则,当本cookbook第二次运行时,当它尝试:停止init.d服务并且找不到该文件时,将出现错误
service 'newreslic-sysmond' do
supports :status => true, :restart => true
action :stop
notifies :delete, 'file[/etc/init.d/newrelic-sysmod]', :delayed
end
第三,安装newrelic sysmond服务的cookbook可能也在通知资源在某处重新启动。你可以用几种方法来处理这个问题,从最漂亮到最丑
阻止创建该服务
如果您能够首先找出服务资源的创建位置,您就可以阻止它。(如果您提供更多信息,我们可以提供帮助)
在重新启动之前不要删除该文件。
缺点是每次运行chef时都会启动、停止和删除init.d脚本,但您可以这样做。只需将删除文件的通知设置为:delayed
通知。只要它在延迟通知堆栈中的时间晚于您的重新启动时间,您就是黄金。这有点脆弱,因为运行列表中的更改可能会破坏它
修改通知堆栈
注意:此代码未经测试,但应该很接近,如果我没有完全正确,请随意编辑响应
ruby_block 'remove delayed restart on newrelic service' do
block
initd_resource = resources('service[newrelic-sysmond]')
initd_notifications = initd_resource.delayed_notifications
notification_collection = run_context.delayed_notification_collection
initd_notifications.each{ |notif| notification_collection.delete(notif) }
end
end
如果您这样做,您可能还需要修改资源堆栈本身,以确保永远不会执行服务
资源。否则,您仍然会回到这样一种情况,即每一次chef运行都可能导致一次又一次地创建和删除。另外,如果找不到资源,resources
方法将抛出一个错误,因此您可能希望将其封装在一些错误控制逻辑中