我有一台基于 Ubuntu 的 HTPC,运行 Samba(服务器)。本地网络中的其他 PC(客户端)连接到 NAS 上的 Samba 共享并将其用作网络驱动器(所有这些 PC 都运行 Win 7)。
我希望服务器在不使用时进入睡眠状态。我已成功设置客户端在连接到本地网络时唤醒它;导致问题的是让它进入睡眠状态。我需要一种方法来可靠地确定当前没有使用任何 Samba 共享。我尝试使用 pre/post exec 钩子以及smb.conf
自定义脚本来跟踪当前使用的共享,这种方法大多数时候都有效。除非客户端未关闭,而是处于休眠状态。当发生这种情况时,post exec 钩子永远不会被调用。这是一个大问题,因为本地网络上一半的客户端都是笔记本电脑。
从那时起,我开发了一个简单的 cron 作业,每隔几分钟运行一次。它的任务是检测是否有人以任何方式使用服务器(包括已安装的 Samba 共享);否则它会让服务器进入睡眠状态。到目前为止,我一直在解析 的输出smbstatus -S
,但它仍然显示共享正在使用中,即使应该使用它们的客户端处于休眠状态并远离网络。此外,当我netstat -tp | grep smbd
此时执行 时,输出中会出现与有问题的客户端的连接,显示为“已建立”,具有正确的 IP 和一切。
此时,我准备从输出中 grep 出客户端的 IP netstat
,然后逐个 ping 它们,以检查客户端是否真的启动并正在运行:o/ 我真的想避免这样做,因为当前的解决方案已经相当巫术了。
请问,如果有人知道我还能做什么,我将非常感激任何帮助。