首页 > 解决方案 > 看门狗模块不通知目录重命名?

问题描述

我需要监视文件,这些文件有时是由笨拙的应用程序在目录的子目录中创建的logs/

logs/foo/per_process_dir/journal.log

我的小守护程序是用 Python 编写的,并使用看门狗模块来监视文件(Linux 上的模块使用 inotify)。我只是要求模块foo/(递归地)监视子目录,并且每当附加日记时它都会通知我...

这一切都有效,但是......当应用程序重新启动时,整个logs/目录都会旋转 - 我希望我的守护进程自动注意到这一点,这样就不需要重新启动它了。

我希望收到一个“已移动”事件——例如,当logs/重命名logs-Sunday/为时——但它没有发生……这个守护进程目前很小,我不愿意通过添加logs/单独查看文件夹的代码来放大它。

或许还有别的办法?

标签: pythonlinuxinotifypython-watchdog

解决方案


如果要捕获logs目录的重命名,则需要将观察者附加到其父目录。也就是说,如果您的logs目录实际上是appname/logs,则不要调用,例如:

observer.schedule(event_handler, 'appname/logs', recursive=True)

你会使用:

observer.schedule(event_handler, 'appname', recursive=True)

(随后您将需要过滤事件并忽略目录之外的事件logs。)


发生这种情况是因为您的文件系统观察者附加到logs目录。当您重命名logs目录时,您的观察者会继续监视它……在新名称下。也就是说,观察者连接到 inode,而不是路径。


推荐阅读