如何有效地监视目录以获取Linux上的更改?

时间:2011-07-22 10:14:12

标签: php linux filesystems directory inode

我正在使用Magento,并且有一个将CSS和Javascript合并为一个大文件的函数。

无论利弊如何,都存在以下问题:

最终文件缓存在多个级别,包括但不限于:

  • Amazon CloudFront
  • 代理服务器
  • 客户端浏览器缓存

Magento使用连接的css文件名的MD5总和为合并的css文件生成新的文件名。因此,每个具有不同css文件集的页面都会获得正确的合并css文件。

要解决缓存问题,我还将文件修改时间戳包含在该哈希中,以便每次修改css文件时都会生成新的哈希。

所以非重新验证缓存得分的全部优势,但是如果某些内容发生了变化,它立即可见,因为资源链接已经改变。

到目前为止一切顺利:

唯一的问题是,用于生成has的文件名只是通常在HTML-Head块中直接引用的文件名,而 不是 在这些文件中包含 css导入

因此,在css文件中导入的文件中的更改不会产生新的哈希。

不,我真的不想递归地解析所有输入并扫描它们或类似的东西。

我更考虑基于目录的解决方案。有没有什么可以有效地监控目录中的最后一次更改"在文件系统的基础上?

我们正在使用ext4。

或许有另一种方法,可能使用find命令,根据inode索引完成所有工作?

那样的东西?

我已经看过许多即时的节目"看到"更改而不扫描整个文件系统。我相信还有一些"文件操作手表" linux下可用的守护进程。

问题是css目录非常庞大。

有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:6)

我建议您使用独立于php的守护进程来修改主要css文件的更改日期,当修改其中一个相关的php文件时。您可以使用dnotify,例如:

dnotify -a -r -b -s /path/to/imported/css/files/ -e touch /path/to/main/css/file;

每次修改其他文件夹中的一个文件时,它将在主css文件上执行'touch'(-a -r -b -s =任何访问/递归目录查找/在后台/无输出中运行)。或者您可以执行任何其他操作并从PHP进行测试。

答案 1 :(得分:2)

如果您使用命令

ls -ltr `find . -type f `

它将为您提供所有最新文件的详细列表。

答案 2 :(得分:2)

尝试查看inotify包,以便在目录中进行修改时通知您。

答案 3 :(得分:1)

我从未使用它,但显然是there is inotify support for PHP

(inotify将是在Linux下获取通知的最有效方式)