我需要一个脚本来检查文件在服务器上上传/创建时的情况。
我编写了检查脚本,但我想让它在创建事件发生时运行。我先尝试使用 iwatch,然后使用 inotify,但遇到了问题,如果同时复制更多文件,inotify/iwatch 只会运行一两次,但不会像创建文件那样运行多次。
例如我运行:
while : ; do inotifywait --format '%f: %e' -e create /path/to/watch; done
而在另一个终端但相同的服务器上,当然我进入了一个包含大量文件的目录,并且 inotify 只会在某些时候在另一个终端上通知我,但不会像它应该做的那样一直通知我。
有人能提示我什么原因会导致这样的事情发生吗?
提前致谢。
答案1
答案2
我设法弄清楚了问题所在。Inotify/Iwatch 可以查看并将这些与给定事件匹配的文件提供给我的脚本,但是当脚本开始处理它们时,Inotify 并没有保留这些文件直到脚本完成,而是将它们丢弃。
所以我做了一个原始的缓存。首先我的脚本将文件以列表的形式写入文本文件中,同时将此文本文件交给另一个进程(我的脚本的一个模块)来处理它们。并使用“&”执行此操作,因此主脚本不会等待模块浏览列表。