我有一个在 Debian 上运行 minidlna 的专用盒子,从共享 cifs 驱动器获取媒体文件。
当我不使用 midia 盒将新文件添加到共享时,minidlna 无法识别新文件,因为未创建 inotify 事件。
我找到了一种解决方法,可以让它时不时地识别从媒体盒运行 touch 的新文件,但它不适用于文件夹,因为 minidlna 只能识别文件夹的 IN_CREATE 和 IN_MOVED_TO 事件,而 touch 不会为文件夹创建这些事件。
因此,我想知道是否有其他方法可以创建此“假”事件,或者您是否知道如何为文件夹创建这些事件之一,而无需移动它。
答案1
如果您使用mount -o remount
CIFS 文件系统会发生什么?
这听起来像是 CIFS 实现中的一个错误,因为目录没有正确触发通知事件。
我找不到有关将事件注入现有 inotify 流的参考资料。我想是的可以可以使用 SystemTap 来完成,但这并不实用。更好的解决方案是提交错误报告ReadyMedia
(SourceForge.net 上项目的当前名称)。
我快速浏览了notify.c
SF.net 上的代码,看起来不错,但仅仅 30 秒就表明添加/删除手表的代码中存在内存泄漏。 :( 但是,看起来修改代码以正确支持目录通知并不困难。
答案2
如果您知道要为哪个文件伪造 inotify 事件,这个技巧可能会有所帮助:
chmod $(stat -c %a $filePath) $filePath
将相同的属性设置回文件,不进行任何更改,但会触发 inotify。
如果您不知道更改的具体文件,您可以使用fswatch
它民意调查监视器不依赖于事件:
fswatch -r -m poll_monitor $folderPath