厨师服务重启机制

时间:2013-08-19 09:53:34

标签: chef

我正在寻找关于厨师重启机制如何在幕后工作的解释。我在网上找不到任何文档,而且我一直试图跟踪代码(触发器是远距离的怪异动作)。

让我们特别关注nginx,并假设我们使用的是厨师服务器,而不是chef-solo(我不知道这是否有所作为。)

我在食谱中有这个(例如):

template '/etc/nginx/nginx.conf' do
  source 'nginx.cfg.erb'
  owner "root"
  group "root"
  mode 00755
  notifies :reload, "service[nginx]", :delayed
end

notifies :reload位表示触发重新加载,:delayed表示它将在chef-client运行结束时发生。这在幕后如何运作?我在执行线程后遇到了麻烦。

某处chef-client必须运行service nginx reload或其他内容。在哪里以及如何定义?

2 个答案:

答案 0 :(得分:17)

notifies发送另一个Chef资源的通知以执行某些操作。

在您的示例中,它将资源service[nginx]告诉:reloadservice[nginx]service resourcenamenginx

要实现此目的,必须在某个时间点在您的节点service[nginx]中声明run_list。否则,Chef会抛出错误。通常这可以由用户在配方中手动完成,也可以通过依赖(例如applicationnginx烹饪书)完成。

Chef究竟如何运行reload命令取决于service[nginx]资源的声明方式,但它通常取决于底层操作系统(这是使用诸如此类工具的美女之一 - - 它抽象了许多较低级别的细节,允许您在多个平台上使用相同的代码。

service文档的语法部分,您可以找到:

  • 服务告知厨师 - 客户在主厨客户端运行期间使用以下提供商之一:Chef::Provider::Service::InitChef::Provider::Service::Init::DebianChef::Provider::Service::UpstartChef::Provider::Service::Init::Freebsd,{{1 },Chef::Provider::Service::Init::GentooChef::Provider::Service::Init::RedhatChef::Provider::Service::SolarisChef::Provider::Service::Windows。厨师 - 客户将根据Ohai收集的数据在运行开始时检测平台。确定平台后,厨师 - 客户将确定正确的提供者

答案 1 :(得分:1)

chef doco中描述了该功能。

如果配置文件的内容发生更改,则会触发重新加载nginx服务。 “延迟”设置意味着重新加载操作发生在厨师运行结束时。我们的想法是,可以通过厨师运行更改几个配置文件,并且您希望最后一次重新加载而不是每个更改的文件(这是“立即”选项)。