我正在阅读client.log
文件并将任何错误输出到客户端上的另一个txt文件。然后我检查该文件是否包含任何内容,如果有,我创建一个错误。这个功能工作得很好。我的问题是我必须让我的配方作为厨师跑的最后一道菜。这是一个问题,因为如果发生错误,那么我的配方不会运行,因为并非所有错误都会在异常中捕获。我现在试图在启动处理程序中运行我的食谱,这样它会捕获上次运行中的错误,这很好。但我无法让启动处理程序正常工作。厨师启动处理程序
我在一本厨师书中做了一个例子。当我重新启动chef-client服务时,出现错误“Windows无法在本地计算机上启动Chef Client Service服务,错误1053服务没有及时响应启动或控制请求。”
这里是我的处理程序代码
reqire "chef/handler"
class Chef
class Handler
class AwesomeStartHandler < Chef::Handler
def report
chef::Log.info("Handler executed")
end
end
end
end
而这就是我被告知把在client.rb文件的顶部。
verify_api_cert true
require "path/awesome_start_handler.rb"
example_start_handler = Chef::Handler::AwesomeStartHandler.new
start_handlers << example_start_handler
下面的代码在client.rb中有效,但只要取消注释require,我就会得到相同的错误消息。 exception_handlers确实创建了一个failed-run-data.json,它确实包含了这些错误,但是由于我已经编写的代码可以与一个启动处理程序一起工作,所以如果我能够使用它,它将是首选。
#require 'path/awesome_start_handler.rb'
#start_handlers << Chef::Handler::AwesomeStartHandler.new()
require 'chef/handler/error_report'
report_handlers << Chef::Handler::ErrorReport.new()
exception_handlers << Chef::Handler::ErrorReport.new()
为什么不使用错误处理程序如果您的目的只是为了发现错误?如果出现错误(例外情况发生),只有厨师运行结束时才会触发它,厨师11.0(IIRC)报告和错误处理程序总是作为厨师分叉运行并由父进程管理。 – Tensibai
我不确定是否在日志中收到错误或致命错误时总是抛出异常,但我被告知总是抛出异常,但并不总是被捕获。所以说什么可能会起作用。我究竟在哪里放置我的代码,这是我遇到的另一个问题,我有食谱chef_client和厨师处理程序。 – balex
我在电话和链接上复制我们很辛苦,明天我会做一个更完整的答案,对于错误级别,报告处理程序是要走的路,它将能够处理资源失败,即使ignore_failure是真正。 – Tensibai