观看 Samba 共享以从 Linux 进行修改

Ala*_*oni 5 linux samba notifications

我正在尝试监视远程 Windows 共享的更改(服务器可以是实际的 Windows 机器或带有 Samba 服务器的 Linux 机器)。AFAIK SMB 协议支持一种基于事件的通知:

http://msdn.microsoft.com/en-us/library/jj216044.aspx

我可以change_notifysmb.conf.

我的问题是:如何从 Linux 机器的客户端观察此类事件?我想设置一些以类似于inotifywait共享文件内容更改或创建、删除或移动文件时的事件通知的方式。

bal*_*cio 3

到 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

Run Code Online (Sandbox Code Playgroud)

以及service由路径触发的描述符:

[Unit]
Description=Do something when path changes

[Service]
Type=simple
ExecStart=/path/to/program

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

与使用 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。

  • 这是我的第一个想法,但实际上行不通。我已经验证 inotify 不会接收远程 Samba 更改的事件。 (2认同)