我正在寻找关于厨师重启机制如何在幕后工作的解释。我在网上找不到任何文档,而且我一直试图跟踪代码(触发器是远距离的怪异动作)。
让我们特别关注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
或其他内容。在哪里以及如何定义?
答案 0 :(得分:17)
notifies
发送另一个Chef资源的通知以执行某些操作。
在您的示例中,它将资源service[nginx]
告诉:reload
。 service[nginx]
是service
resource,name
是nginx
。
要实现此目的,必须在某个时间点在您的节点service[nginx]
中声明run_list
。否则,Chef会抛出错误。通常这可以由用户在配方中手动完成,也可以通过依赖(例如application
或nginx
烹饪书)完成。
Chef究竟如何运行reload
命令取决于service[nginx]
资源的声明方式,但它通常取决于底层操作系统(这是使用诸如此类工具的美女之一 - - 它抽象了许多较低级别的细节,允许您在多个平台上使用相同的代码。
在service
文档的语法部分,您可以找到:
Chef::Provider::Service::Init
,Chef::Provider::Service::Init::Debian
,Chef::Provider::Service::Upstart
,Chef::Provider::Service::Init::Freebsd
,{{1 },Chef::Provider::Service::Init::Gentoo
,Chef::Provider::Service::Init::Redhat
,Chef::Provider::Service::Solaris
或Chef::Provider::Service::Windows
。厨师 - 客户将根据Ohai收集的数据在运行开始时检测平台。确定平台后,厨师 - 客户将确定正确的提供者答案 1 :(得分:1)
chef doco中描述了该功能。
如果配置文件的内容发生更改,则会触发重新加载nginx服务。 “延迟”设置意味着重新加载操作发生在厨师运行结束时。我们的想法是,可以通过厨师运行更改几个配置文件,并且您希望最后一次重新加载而不是每个更改的文件(这是“立即”选项)。