Inotify/iwatch 无法查看同时创建了更多文件的情况

Inotify/iwatch 无法查看同时创建了更多文件的情况

我需要一个脚本来检查文件在服务器上上传/创建时的情况。

我编写了检查脚本,但我想让它在创建事件发生时运行。我先尝试使用 iwatch,然后使用 inotify,但遇到了问题,如果同时复制更多文件,inotify/iwatch 只会运行一两次,但不会像创建文件那样运行多次。

例如我运行: while : ; do inotifywait --format '%f: %e' -e create /path/to/watch; done

而在另一个终端但相同的服务器上,当然我进入了一个包含大量文件的目录,并且 inotify 只会在某些时候在另一个终端上通知我,但不会像它应该做的那样一直通知我。

有人能提示我什么原因会导致这样的事情发生吗?

提前致谢。

答案1

有一个很棒的工具叫 lsyncd。它用于同步,但我也用它来更改上传文件的权限。看看例子

您可以使用它或者查看代码,它使用 inotify。

巴西雷亚尔

答案2

我设法弄清楚了问题所在。Inotify/Iwatch 可以查看并将这些与给定事件匹配的文件提供给我的脚本,但是当脚本开始处理它们时,Inotify 并没有保留这些文件直到脚本完成,而是将它们丢弃。

所以我做了一个原始的缓存。首先我的脚本将文件以列表的形式写入文本文件中,同时将此文本文件交给另一个进程(我的脚本的一个模块)来处理它们。并使用“&”执行此操作,因此主脚本不会等待模块浏览列表。

相关内容