![有没有办法确定 SAMBA 共享是否有打开的文件?](https://linux22.com/image/537851/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E7%A1%AE%E5%AE%9A%20SAMBA%20%E5%85%B1%E4%BA%AB%E6%98%AF%E5%90%A6%E6%9C%89%E6%89%93%E5%BC%80%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
这是有关的如果没有 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 机器已连接,即使用户没有主动使用该共享,所以您可能还需要根据情况来决定做什么。