我在 ubuntu 服务器上通过 CIFS 安装了一个 Windows 共享。我需要一种方法来了解何时将新文件添加到 Windows 共享中。我试过这个inotify程序:
http://www.thegeekstuff.com/2010/04/inotify-c-program-example/
它适用于标准目录,但无法捕获任何 CIFS 更改。尽管我愿意,但我不一定需要使用 inotify,但是有关如何完成获取文件创建通知的任何建议都会很棒。
我在 ubuntu 服务器上通过 CIFS 安装了一个 Windows 共享。我需要一种方法来了解何时将新文件添加到 Windows 共享中。我试过这个inotify程序:
http://www.thegeekstuff.com/2010/04/inotify-c-program-example/
它适用于标准目录,但无法捕获任何 CIFS 更改。尽管我愿意,但我不一定需要使用 inotify,但是有关如何完成获取文件创建通知的任何建议都会很棒。
我也一直在研究这个问题并遇到了同样的问题——不幸的是,似乎(在谷歌上搜索了一下)无法在 CIFS 挂载的分区上使用 inotify——以下是来自一个 redhat 论坛的帖子几年前:
“目前,不,这在 CIFS 上是不可能的。最近删除了允许文件系统设置额外通知的 VFS 挂钩。其中唯一的“用户”是 CIFS,而且它从来没有正常工作过。用于此的内核接口有问题也很严重。
我认为 Steve 计划重新实现它,但这是一个重大项目,这意味着向内核的 VFS 层添加新功能。”
虽然这是几年前的事了,但似乎我们离提供这个设施还差得远——真遗憾,我也可以真正使用它!
我也遇到了这个问题,并得出了与 Stephen Sullivan 相同的结论(CIFS + inotify = 不行)。
然而,由于我的工作流程碰巧依赖于远程挂载和依赖 inotify 的自动编译工具,我最终构建了一个(相当绝望和 hacky)的解决方案,它基本上只是使用轮询来监视更改,然后再次触及相同的文件在已安装的一侧,这似乎会触发 inotify 事件。这不是我最自豪的时刻。
话虽如此,它确实有效,所以,享受吧:http: //github.com/rubyruy/watchntouch
它可以做到..有点
如果您设置了 webdav 服务器并将共享包含为 webdav 位置,则可以在您的 samba 服务器上监视该位置,同时通过 webdav 从您的 Windows 机器访问它。
最大的问题是文件权限是 ab*tch... 与 apache2 webdav 一样,因为它缺少传递身份验证
对于运行 Linux docker 容器的 Windows 主机,有一篇关于他的问题的详细文章,其中提供了适用于“docker-windows-volume-watcher”的解决方案:http: //blog.subjectify.us/miscellaneous/2017/04/24/ docker-for-windows-watch-bindings.html
看起来 CIFS inotify 的 Linux 实施不会很快提供支持。
老话题,依然重要!我对此的回答是:“这取决于!”。从我此时的经验测试来看,这种行为非常清楚。如果 Linux 主机 [在 CIFS 挂载时] 启动文件系统事件,则 inotify 会正常看到它。如果托管 CIFS 挂载的 Windows 机器启动了文件系统事件,那么 inotify [在 Linux 机器上] 将根本看不到它。
如果您的目标是让 Linux 主机收到有关 Windows 主机创建或写入文件的通知,那么您就不走运了。由于这可能是该机制最理想的用途,它确实使这个微妙的“取决于”答案不是那么有用!