有没有办法确定 SAMBA 共享是否有打开的文件?

有没有办法确定 SAMBA 共享是否有打开的文件?

这是有关的如果没有 SSH 连接或打开的文件,则尝试关闭很少使用的服务器。

如何在 shell 脚本(Linux 机器上的 cron 作业)中确定当前的 samba 共享中是否有任何打开的文件?

答案1

如果您的 samba 服务器配置为使用文件锁定(可能就是这样),我想您可以使用“smbstatus -L”列出锁,然后在输出中 grep 您正在寻找的锁类型(EXCLUSIVE、BATCH)如果您知道您只关心某些类型的锁。

就像是:

smbstatus -L | grep EXCLUSIVE

然后根据 cron 作业脚本中的返回值($?)进行测试。

不幸的是,我不太了解锁的类型,不知道这是否是一种合适的万能方法。

答案2

我可能会使用 lsof 命令来确定共享上正在使用的文件。

lsof | grep /path/to/share应显示正在使用的文件。

答案3

cense 的回答很好,他关于锁的观点也适用于这个答案。Samba 还允许只读状态(我认为它显示为 RD_ONLY),并且还显示 Windows 资源管理器中打开的目录的条目,因此您必须决定要忽略/关注哪种锁。

我相信的输出smbstatus是,如果没有机器连接,那么当没有任何东西连接时,No machines connected.您可以使用类似关机的操作。smbstatus|grep No\ machines\ connected && shutdown

据我所知(现在无法访问 Samba 服务器),如果您在 Windows 中安装了 Samba 共享,smbstatus则会显示 Windows 机器已连接,即使用户没有主动使用该共享,所以您可能还需要根据情况来决定做什么。

相关内容