从 Linux 监视 Samba 共享的修改

从 Linux 监视 Samba 共享的修改

我正在尝试监视远程 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。

相关内容