获取文件在Linux中为CIFS Mount创建通知

时间:2011-11-14 16:22:17

标签: linux samba inotify cifs

我在ubuntu服务器上通过CIFS安装了Windows共享。我需要知道何时将新文件添加到Windows共享中。我尝试了这个inotify程序:

http://www.thegeekstuff.com/2010/04/inotify-c-program-example/

适用于标准目录,但无法捕获任何CIFS更改。我不一定需要使用inotify,虽然我想,但任何关于如何完成获取文件创建通知的建议都会很棒。

5 个答案:

答案 0 :(得分:16)

我也一直在研究这个并遇到同样的问题 - 似乎(在google上进行了一些拖网)之后,不幸的是,它无法在CIFS安装的分区上使用inotify - 以下是在redhat论坛中几年前的帖子:

  

“目前,CIFS无法做到这一点.VFS挂钩允许a   最近删除了用于设置额外通知的文件系统。该   只有他们的“用户”是CIFS,它无论如何都从未正常工作。该   内核接口也存在严重问题。

     

我认为史蒂夫计划重新实施它,但这是一个重大项目   这意味着向内核的VFS层添加新功能。“

虽然这是几年前的事情,但似乎我们并没有更接近这个设施 - 耻辱,我本可以真正使用它!

答案 1 :(得分:8)

我也遇到了这个并得到了与斯蒂芬沙利文相同的结论(CIFS + inotify = no go)。

然而,由于我的工作流程依赖于依赖于inotify的远程挂载和自动编译工具,我最终构建了一个(相当绝望和苛刻的)解决方案,它基本上只使用轮询来监视更改然后触摸在安装的一侧再次使用相同的文件, 似乎触发了inotify事件。这不是我最自豪的时刻。

话虽如此,它确实有效,所以,享受:http://github.com/rubyruy/watchntouch

答案 2 :(得分:0)

可以做到......有点

如果您设置了webdav服务器并将共享作为webdav位置包含在内,则可以通过Windows机器上的webdav访问samba服务器上的位置。

这个问题的一大问题是,文件权限是一个b * tch ...与apache2 webdav一样,因为它缺少传递身份验证

答案 3 :(得分:0)

对于运行Linux docker容器的Windows主机,有一篇关于提供的解决方案问题的详细文章,该解决方案可以正常运行" docker-windows-volume-watcher":http://blog.subjectify.us/miscellaneous/2017/04/24/docker-for-windows-watch-bindings.html

看起来很快就会从CIFS inotify的Linux实现中获得支持。

答案 4 :(得分:0)

旧话题,仍然很重要! 我对此的回答是:“取决于情况!”。 根据我目前的经验测试,这种行为非常明显。如果Linux主机[在CIFS挂载时]启动文件系统事件,则inotify会发现它很好。如果承载CIFS挂载的Windows计算机启动了文件系统事件,则inotify [在Linux计算机上]根本看不到它。

如果您的目标是让Linux主机获得Windows主机已创建或写入文件的通知,那么您很不走运。由于这可能是此机制最理想的用法,因此确实使这种微妙的“取决于”答案不是那么有用!