厨师守护进程每30分钟运行一次

时间:2013-02-15 23:52:28

标签: chef

我知道Chef是基于pull的,因为它检测到配方中的任何更改并使用chef客户端来安装更改。 我们使用chef来调出EC2实例,但是每30分钟作为守护进程运行的chef-client会再次运行所有的配方,导致对某些服务进行不必要的更改。 我想知道有哪些选项可以改变这一点,并按需运行厨师 - 客户。

以下是我到目前为止所考虑的选项,

  1. 将chef-client cookbook上的间隔时间更改为非常高的时间,以便守护程序不会经常运行。
  2. 部署EC2实例后,请杀死主厨守护进程ssh,或者甚至是厨师食谱。
  3. 此外,我相信厨师 - 客户每周都会安排日志轮换,这将再次重启厨师 - 客户端。 关于如何避免这种基于拉动的行为的任何想法?

3 个答案:

答案 0 :(得分:10)

首先:

无论厨师运行多少次,您的厨师食谱都应将您的节点设置为1和相同的配置。您也不应该自己重启任何服务。如果配置文件已更改,则应通过配置文件通知此行为。例如:

service 'apache2' do
  action [:enable, :start]
end

template '/etc/apache2/httpd.conf' do
  action :create
  [...]
  notifies, :restart, 'service[apache2]' #this notification will launch, only if the file has changed
end

您还可以通过运行chef-client --once来禁用chef-client守护程序。这样厨师将配置节点并将从cron中删除self。因此,将来它只能按需手动运行。

但是你的更大问题实际上是你的厨师 - 客户端运行会导致每次运行时对你的一些服务进行更改。你应该先解决它。

答案 1 :(得分:0)

我同意Draco关于解决潜在问题的说法,但是如果你想阻止厨师 - 客户每30分钟运行一次,你应该能够从你的运行列表中删除chef-client :: service食谱。请参阅chef-client README

答案 2 :(得分:0)

如果您正在使用Chef databags构建配置文件,则需要对搜索结果进行排序,因为这些将在不同的运行中以相同的顺序返回。如果您不对结果进行排序,那么您将拥有Apache服务,这些服务在没有明显原因的情况下经常重启。

确保您的厨师 - 客户端运行具有相同数据的幂等。不能强调这一点。