【问题标题】:How to determine if any file in a directory has changed如何确定目录中的任何文件是否已更改
【发布时间】:2015-06-07 18:37:57
【问题描述】:

是否有办法让 Chef 确定它是否更改了给定目录中的任何文件?如果 conf.d 目录中的任何设置被更新,我想重新启动服务器进程。

我确信可以在每次 chef-client 运行时将 md5sum 列表写入文件,并将当前迭代与之前的迭代进行比较。但这是一个相当多的代码来解决看似常见的情况。有没有更好的办法?

【问题讨论】:

  • 你知道notifications吗?
  • @StephenKing 不,这看起来很完美。如果您将其作为问题的答案提交,我会接受。
  • 很高兴我能提供帮助。抱歉耽搁了(通知没有延迟,只是空闲时间:-))

标签: chef-infra


【解决方案1】:

您可以使用 inotify-tools 包中的 inotifywait 实用程序

【讨论】:

  • 抱歉,chef 是一个配置管理系统。使用 inotify 将与至少我作为厨师用户想要的相矛盾。
【解决方案2】:

Chef 提供了一个名为 notifications 的概念。

这允许您定义一个资源的更改触发另一个资源的执行。配置文件更改后重新启动服务可能是最常见的用例。

template "/etc/foo/conf.d/example.conf" do
    notifies :restart, "service[foo]"
end

service "foo" do
    supports :restart => true, :reload => true
    action :enable
end

默认情况下,通知是:delayed,这意味着它们会在 Chef 运行结束时触发。这可以帮助您避免例如为每个更改的配置文件重新启动一次服务。如果您想立即收到通知,请使用

notifies :restart, "service[foo]", :immediately

当然,您不仅可以将 Chef 的通知用于服务,还可以用于任何资源。更多示例请参见documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2010-09-08
    • 2016-12-19
    • 2018-05-02
    • 2011-06-28
    相关资源
    最近更新 更多