У меня есть HTPC на базе Ubuntu под управлением Samba (сервер). Другие ПК в локальной сети (клиенты) подключаются к общим ресурсам Samba на NAS и используют их в качестве сетевых дисков (все эти ПК работают под управлением Win 7).
Я бы хотел, чтобы сервер перешел в спящий режим, когда он никак не используется. Я успешно настроил клиентов на пробуждение при подключении к локальной сети; вещь, которая вызывает проблемы, это заставляет это спать. Мне нужен способ надежно определить, что ни одна из акций Samba в настоящее время не используется. Я пытался использовать pre / post exec-хуки в smb.conf
вместе с пользовательским скриптом для отслеживания используемых в данный момент общих ресурсов, и это работало большую часть времени. За исключением случая, когда клиент не выключен, а вместо этого находится в спящем режиме. Когда это происходит, ловушка post exec никогда не вызывается. И это серьезная проблема, потому что половина клиентов в локальной сети - это ноутбуки.
С тех пор я разработал простую работу cron, которая запускается каждые пару минут. Его задача - определить, использует ли кто-нибудь сервер каким-либо образом (включая смонтированные общие ресурсы Samba); в противном случае он переводит сервер в спящий режим. До сих пор я анализировал вывод smbstatus -S
, но он все еще показывает, что общие ресурсы используются, даже после того, как клиент, который должен их использовать, находится в спящем режиме и находится вдали от сети. Более того, когда я делаю netstat -tp | grep smbd
в этот момент, соединение с клиентом-нарушителем присутствует в выходных данных, отображается как "ESTABLISHED", с правильным IP и всем.
На данный момент я нахожусь на грани извлечения IP-адресов клиентов из вывода netstat
и пингования их, один за другим, чтобы проверить, действительно ли клиенты работают и работают:o/ Я действительно хотел бы избежать выполнения это, поскольку текущее решение уже довольно вуду.
Пожалуйста, если кто-нибудь знает, что еще я могу сделать, любая помощь будет принята с благодарностью.