Chef infra chef中的服务重启机制
我想了解一下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
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_命令
。@sekrettreload_命令
必须由服务
提供程序定义。它使用restart_命令
来执行erride在时的正常操作:重新启动,因此命名没有太大区别。