使用 inotifywait 排队事件

Posted

技术标签:

【中文标题】使用 inotifywait 排队事件【英文标题】:Queuing events with inotifywait 【发布时间】:2015-02-26 03:33:46 【问题描述】:

初始化源目录和目标目录。

srcdir=/user/user1/src
tagtdir=/user/user1/dest

我希望在将文件复制到 srcdir 和 -m 以进行持续监控时收到通知。

inotifywait -m -r -e close "$srcdir" | 

while read filename eventlist eventfile 

调用我的 python 脚本。

do 
    mv "$srcdir/$eventfile" "$tgtdir/$eventfile" && ./myscript.py "$eventfile" 
done 

不幸的是,我的脚本很长一段时间,如果在执行myscript.py 时还有其他文件被复制,我会错过这些事件。是否可以将事件排队并稍后处理?

另一个选项是我将在后台运行myscript.py,这可能会解决这个问题。

【问题讨论】:

【参考方案1】:

您可以改用Watchman;它作为持久服务运行,并会记住您错过的事件。

您可以通过多种不同的方式来实现您的用例,但最简单的方法可能是设置触发器并让 watchman 在文件更改时直接运行您的脚本,或者使用 pywatchman 客户端绑定来持久化python 脚本运行并订阅事件并采取您想要的任何操作。

【讨论】:

以上是关于使用 inotifywait 排队事件的主要内容,如果未能解决你的问题,请参考以下文章

Linux 上的 inotifywait 是不是允许在超时期间收集事件?

使用 inotifywait 监视多个目录并运行脚本

将 docx 转换为 PDF 时两次 inotifywait 触发事件

Linux inotifywait常用参数说明

inotifywait命令常用参数 Linux周末学习

Inotifywait 用于大目录