如何确定目录中的任何文件是否已更改

时间:2015-04-02 17:42:41

标签: chef

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

我确信可以将md5sums列表写入每个chef-client运行的文件中,并将当前与之前的迭代进行比较。但这是一个很好的代码来解决看似常见的情况。还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

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中提供了更多示例。

答案 1 :(得分:-2)

您可以使用inotify-tools

中的inotifywait实用程序
相关问题