inotify - 最好的方法是啥?

Posted

技术标签:

【中文标题】inotify - 最好的方法是啥?【英文标题】:inotify - what is the best way to go about it?inotify - 最好的方法是什么? 【发布时间】:2015-03-17 12:08:20 【问题描述】:

我在我的 linux 服务器上有 inotify。我在网上查找了大量关于如何使用 inotify 的帖子,并找到了一个示例 c 代码,它监视目录以进行文件创建/删除。它在本地目录和 nfs 目录上都运行良好(这是我真正需要的)

现在查看有关如何使其成为始终运行的进程的选项,我看到至少根据我的理解有以下选项

    我猜想尝试运行这段 c 代码并等待并且永远不要关闭它? incrond - 这显然是一个守护进程。我的 linux 服务器上似乎没有它,我有 rhel5,所以我想我需要安装它。不太清楚 incrond 的工作原理。 inotify-tools - 这听起来最简单,因为它说我可以在 shell 脚本中使用命令

我还有一些问题,比如当 nfs 挂载被移除、服务器关闭等时会发生什么,inotify 会知道从它离开的地方拿起吗?!

我知道这是很多问题,但任何指示都会对我有很大帮助。提前致谢。同时,我将继续使用相同的 c 代码。

【问题讨论】:

为什么要使用inotify(7)?做什么的?实际用例是什么?请编辑您的问题以改进它。 【参考方案1】:

我认为inotify(7) 不能可靠地与网络文件系统(NFS 或 CIFS)一起工作。

如果本地主机正在修改/写入某些 NFS 挂载系统,它可以工作(在本地主机上)。

如果某些远程客户端正在修改/写入某些 NFS 挂载系统(由本地主机挂载),它将无法工作(在本地主机上)。

因为 NFS 协议(至少我知道的那些,在 NFS4 之前)是一个 RPC 协议,远程 NFS 服务器(安装该 NFS 系统)无法向远程客户端发出信号,表明正在发生某些事情。

【讨论】:

你是对的。当我触摸 nfs 服务器上的文件时它不起作用。我有一个要求,我需要在目录上侦听,每当有新文件出现时,我需要执行一个 shell 脚本,该脚本将获取文件名并生成参考消息并将其发送给应用程序,然后应用程序将拾取文件并处理它。所有这些目录都是 NFS。如果 inotify 不起作用,我还能用什么? 没有什么能可靠地工作,除非它在 ​​NFS 服务器本身上运行。您可以在已挂载的 NFS 系统上在客户端上运行 find 命令,但这可能会很慢(并且不会完全可靠)

以上是关于inotify - 最好的方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

真正的手表描述符是啥? (Linux inotify 子系统)

rsync+inotify

解决tail命令提示“tail: inotify 资源耗尽,无法使用 inotify 机制,回归为 polling 机制”

rsync+inotify实现实时同步

libevent+inotify实现配置文件实时读取

Rsync+inotify实现实时同步