首先,厨师可以(并且这是一种很好的做法)以特定的时间间隔为特定角色运行食谱吗?

我有一个管理用户帐户和 ssh 身份的 ruby​​ 脚本,它目前每小时在 cron 上运行一次,出于显而易见的原因,我想将其转换为 Chef 配方(我希望它在所有机器上都存在)。

我可以看到两种方法:

要么将脚本转换为模板,配方只会将模板渲染到给定的路径,然后注册一个 cronjob

或者

将脚本分解为资源、提供者等,并让 Chef 每小时运行一次。

想法?

最佳答案

您可以将 Chef-client 作为守护进程(-d 选项,在 init 脚本中使用)运行,或者在 upstartrunit/daemontools 或 bluepill 等服务管理工具下运行。您当然也可以从 cron 启动它 - 只需确保不在那里运行守护程序模式:)。

Chef 的资源提供者采取幂等操作将资源配置为处于所需状态。这意味着如果 Chef 已经在系统上运行,它只会在资源与配方所说的不匹配时修改资源。例如,如果您有一个食谱,上面写着:

package "haproxy"

service "haproxy" do
  action [:enable, :start]
end

template "/etc/haproxy/haproxy.cfg" do
  source "haproxy.cfg.erb"
end

该软件包将在第一次运行 Chef 时安装并且不会再次修改,除非该软件包已从系统中删除,或者您修改了资源。同样,haproxy 服务将被启用(通过您平台的服务管理工具,通常是/etc/rc*.d 中的符号链接(symbolic link))然后启动(例如,通过/etc/init.d/haproxy start)。最后,只有当模板的内容发生变化时,Chef 才会呈现模板的新版本。对于模板,它根据 SHA256 校验和确定这一点。

有一些异常(exception) - 执行、脚本和 ruby​​_block 资源不是幂等的,除非您提供某种限定符条件。

此外,Chef 在使用服务器时没有“一次性”或“一次性”食谱运行列表。最近有一个关于这个话题的 thread on the Chef mailing list

关于cron - 厨师 - 重复的食谱执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4913521/

10-15 00:46