看门狗模块不通知目录重命名?
Posted
技术标签:
【中文标题】看门狗模块不通知目录重命名?【英文标题】:Watchdog module does not notify of directory rename? 【发布时间】:2019-08-12 00:04:21 【问题描述】:我需要监视文件,这些文件有时由 logs/
目录的子子目录中的笨重应用程序创建:
logs/foo/per_process_dir/journal.log
我的小守护程序是用 Python 编写的,并使用 watchdog-module 来监视文件(Linux 上的模块使用 inotify)。我只是要求模块监视foo/
子目录(递归),它会通知我,每当附加日记时...
这一切都有效,但是...当应用程序重新启动时,整个logs/
目录会被轮换——我希望我的守护进程自动注意到这一点,这样就不需要重新启动它了。
我预计会收到一个“已移动”事件——例如,当 logs/
重命名为 logs-Sunday/
时——但它没有发生......这个守护进程目前很小,我不愿意将它放大添加单独观看logs/
文件夹的代码。
也许还有其他方法?
【问题讨论】:
【参考方案1】:如果你想捕捉logs
目录的重命名,你需要将你的观察者附加到它的父目录。也就是说,如果您的logs
目录实际上是appname/logs
,则不要调用,例如:
observer.schedule(event_handler, 'appname/logs', recursive=True)
你会使用:
observer.schedule(event_handler, 'appname', recursive=True)
(随后您将需要过滤事件并忽略logs
目录之外的事件。)
这是因为您的文件系统观察者附加到了logs
目录。当您重命名 logs
目录时,您的观察者会继续监视它……在新名称下。也就是说,观察者是附加到 inode 上的,而不是附加到路径上的。
【讨论】:
以上是关于看门狗模块不通知目录重命名?的主要内容,如果未能解决你的问题,请参考以下文章