Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chef infra chef中的服务重启机制_Chef Infra - Fatal编程技术网

Chef infra chef中的服务重启机制

Chef infra chef中的服务重启机制,chef-infra,Chef Infra,我想了解一下chef的重启机制在幕后是如何工作的。我在网上找不到任何关于它的文档,而且我在试图追踪代码时遇到了麻烦(触发器是一种可怕的远距离动作) 让我们具体来看一下nginx,假设我们使用的是厨师服务器,而不是chef solo(我不知道这是否有区别) 我在食谱中有这样一个(例如): template '/etc/nginx/nginx.conf' do source 'nginx.cfg.erb' owner "root" group "root" mode 00755

我想了解一下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
通知:reload
位表示它触发重新加载,而
:delayed
表示它将在
chef客户端运行结束时发生。这在幕后是如何运作的?我在执行线程时遇到问题


某个地方
chef-client
必须运行
服务nginx-reload
或类似的东西。在何处以及如何定义该功能?

中描述了该功能


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

通知
发送另一个chef资源执行某项操作的通知

在您的示例中,它告诉资源
服务[nginx]
重新加载
<代码>服务[nginx]
是一个
名称
nginx
的服务

要使其工作,必须在某个时刻在节点的
run\u列表中声明
service[nginx]
。否则,Chef将抛出一个错误。通常,这可以由用户在菜谱中手动完成,也可以通过依赖项(例如,或烹饪书)完成

Chef运行
reload
命令的确切方式取决于
服务[nginx]
资源的声明方式,但通常取决于底层操作系统(这是使用这样的工具的好处之一——它从您身边抽象出许多较低级别的细节,并允许您跨多个平台使用相同的代码)

服务
文档的语法部分,您可以找到以下内容:

  • 服务告诉厨师长客户端在厨师长客户端运行期间使用以下提供者之一:
    chef::Provider::service::Init
    chef::Provider::service::Init::Debian
    chef::Provider::Upstart
    chef::Provider::service::Init::Freebsd
    chef::Provider::service::Init::Gentoo
    Chef::Provider::Service::Init::Redhat
    Chef::Provider::Service::Solaris
    Chef::Provider::Service::Windows
    ,或
    Chef::Provider::Service::Macosx
    。Chef客户端将根据Ohai收集的数据在运行开始时检测平台。在识别平台后,Chef客户端将取消终止正确的提供者

您也可以使用
restart_命令“service nginx reload”
,但我认为
provider…
的侵入性较小。Docs:他需要重新加载,所以应该改用
reload_命令
。@sekrett
reload_命令
必须由
服务
提供程序定义。它使用
restart_命令
来执行erride在
时的正常操作:重新启动
,因此命名没有太大区别。