【问题标题】:Service restart mechanism in chefChef中的服务重启机制
【发布时间】:2017-05-07 00:48:31
【问题描述】:

我正在寻找有关厨师的重启机制如何在幕后工作的解释。我在网上找不到它的任何文档,而且我在试图追踪代码时遇到了困难(触发器是令人毛骨悚然的远距离动作)。

让我们具体看看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 或类似的东西。这是在哪里以及如何定义的?

【问题讨论】:

    标签: chef-infra


    【解决方案1】:

    notifies 发送通知让另一个 Chef 资源执行某项操作。

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

    为此,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::FreebsdChef::Provider::Service::Init::GentooChef::Provider::Service::Init::RedhatChef::Provider::Service::SolarisChef::Provider::Service::WindowsChef::Provider::Service::Macosx。 chef-client 将根据 Ohai 收集的数据在运行开始时检测平台。确定平台后,主厨-客户将确定正确的提供者

    【讨论】:

    • 您也可以使用restart_command 'service nginx reload',但我认为provider ... 的干扰性较小。文档:docs.opscode.com/resource_service.html
    • 他需要重新加载,所以应该使用reload_command
    • @sekrett reload_command 必须由 service 提供程序定义。它使用restart_command 覆盖:restart 上的正常操作,因此命名并没有太大区别。
    【解决方案2】:

    chef doco 中描述了该功能。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多