inotify:避免重复文件更改的循环

inotify:避免重复文件更改的循环

我在 Ubuntu 18.4 系统上使用inotify(通过 实现pyinotify)来监视某些目录中的创建、修改和属性更改。

我使用这些监视标志:IN_CREATE、IN_MOVED_TO、IN_MOVED_FROM、IN_MODIFY 和 IN_ATTRIB

inotify当我注意到文件发生这些更改之一时,我所做的一件事就是对文件执行 a 操作chmod,有时甚至chown执行 a 操作。例如,如果这些监视文件之一的修改日期发生更改(例如,通过touch命令),或者如果文件的大小发生变化,我将对该文件执行 achmod和可能的 a 。chown

但是,使用 IN_ATTRIB 监视标志时,chmodchown标志会触发另一个 IN_ATTRIB 更改,这会导致我重新发出该命令,进而导致 IN_ATTRIB 一次又一次地注意到该文件,从而导致相同更改的循环。

我想避免这种情况。我知道我可以做到这一点的一种方法是在发出chmod或之前检查权限和所有权chown,并且仅在确实需要更改时才运行其中一个。但是,我想知道是否有一种方法inotify(或pyinotify) 可以导致观察程序中所做的更改被忽略。

我知道我可以暂时禁用观看该特定文件,但随后我必须在某个时候重新启用观看它,以防再次需要修改该文件。

chmod除了在发出或之前检查权限和所有权之外chown,还有其他方法可以完成我想要做的事情吗?

先感谢您。

答案1

鉴于我没有得到任何答复,并且考虑到进一步的调查没有产生有关如何inotify忽略它对文件和目录所做的更改的信息,我现在假设没有办法做到这一点,因为缺乏编码逻辑我的监视例程实际上不会调用诸如chmod和之类的东西,chown除非属性或所有权当前实际上与预期值不同。

这需要我的代码中有很多额外的逻辑,但它也解决了问题。

相关内容