我正在尝试监视远程 Windows 共享中的更改(服务器可以是实际的 Windows 计算机或带有 Samba 服务器的 Linux 计算机)。据我所知,SMB 协议支持一种基于事件的通知:
http://msdn.microsoft.com/en-us/library/jj216044.aspx
change_notify
我可以在中的选项中找到它在 Samba 中服务器端的实现smb.conf
。
我的问题是:如何在 Linux 机器的客户端上监视此类事件?我想设置一些以类似方式工作的东西,inotifywait
并在共享上的文件内容发生变化或创建、删除或移动文件时通过事件通知。
答案1
截至 2022 年我认为使用systemd
路径描述符也可以与 SAMBA 共享配合使用。您必须创建一个path
描述符和一个经典service
描述符,当路径触发时,它将运行某些操作:
# Path descriptor
[Unit]
Description=Watch a file this may work also with directory but is untested
Wants=<your_sevice>.service
[Path]
#
PathModified=/path/to/file
[Install]
WantedBy=multi-user.target
以及service
由路径触发的描述符:
[Unit]
Description=Do something when path changes
[Service]
Type=simple
ExecStart=/path/to/program
[Install]
WantedBy=multi-user.target
作为使用 systemd 路径,路径描述符支持其他类型的选项。
旧答案 一个想法是在 Linux 上使用 Inotify 来监视文件系统的变化。
作为 SAMBA 3.0.23 (http://wiki.samba.org/index.php/Samba_3.0_Features_added/changed),该协议现在支持 Inotify 服务器站点,以通知兼容客户端文件系统的变化。
但,正如https://lkml.org/lkml/2007/4/7/129,看来实际上 CIFS 客户端不能正确支持 Inotify。