使用 inotifywait 排队事件

Queuing events with inotifywait

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

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,这可能会解决这个问题。

您可以使用Watchman代替;它 运行 作为一项持久服务,会记住您错过的事件。

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