如何在 debian 上创建假 inotify 事件?

如何在 debian 上创建假 inotify 事件?

我有一个在 Debian 上运行 minidlna 的专用盒子,从共享 cifs 驱动器获取媒体文件。

当我不使用 midia 盒将新文件添加到共享时,minidlna 无法识别新文件,因为未创建 inotify 事件。

我找到了一种解决方法,可以让它时不时地识别从媒体盒运行 touch 的新文件,但它不适用于文件夹,因为 minidlna 只能识别文件夹的 IN_CREATE 和 IN_MOVED_TO 事件,而 touch 不会为文件夹创建这些事件。

因此,我想知道是否有其他方法可以创建此“假”事件,或者您是否知道如何为文件夹创建这些事件之一,而无需移动它。

答案1

如果您使用mount -o remountCIFS 文件系统会发生什么?

这听起来像是 CIFS 实现中的一个错误,因为目录没有正确触发通知事件。

我找不到有关将事件注入现有 inotify 流的参考资料。我想是的可以可以使用 SystemTap 来完成,但这并不实用。更好的解决方案是提交错误报告ReadyMedia(SourceForge.net 上项目的当前名称)。

我快速浏览了notify.cSF.net 上的代码,看起来不错,但仅仅 30 秒就表明添加/删除手表的代码中存在内存泄漏。 :( 但是,看起来修改代码以正确支持目录通知并不困难。

答案2

如果您知道要为哪个文件伪造 inotify 事件,这个技巧可能会有所帮助:

chmod $(stat -c %a $filePath) $filePath

将相同的属性设置回文件,不进行任何更改,但会触发 inotify。

如果您不知道更改的具体文件,您可以使用fswatch民意调查监视器不依赖于事件:

fswatch -r -m poll_monitor $folderPath

相关内容