看门狗模块不通知目录重命名?

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 上的,而不是附加到路径上的。

【讨论】:

以上是关于看门狗模块不通知目录重命名?的主要内容,如果未能解决你的问题,请参考以下文章

SDRAM和重定位---看门狗详解

浅析DSP28035的看门狗模块

浅析DSP28035的看门狗模块

浅析DSP28035的看门狗模块

stm32f10x独立看门狗

关闭看门狗