А не подскажете как Вы реализовали выключение сервера при выключении компьютеров? Я использую poweroff Возможно Ваше решение более элегантное, т.к. мне не всегда удается реализовать задуманный сценарий. Заранее спасибо за консультацию.
Отчего же не подсказать, подскажу. Уже почти забыл что там сделано. Будем вспоминать...
Для начала про свою сеть:
Router - Zyxel nbg460n. К нему проводами три машины на винде, одна из которых интересующий нас "типа сервер", ещё по WIFI - дюна, недобук, пара планшетов и пара телефонов. DHCP сервер маршрутизатора раздаёт статические IP адреса по заданной таблице МАС адресов. Таким образом каждая железка всегда имеет один и тот же адрес. Адресное пространство условно разделено на три части. В первую входит одна машина, собственно сам сервер (на win7). Во вторую часть включены устройства, которые могут что-то хотеть от сервера (назовём их КЛИЕНТЫ). В третью часть те, кому нужен только выход в интернет (в данном случае они нам не интересны).
Алгоритм простой:
Каждые 15 минут сервер запускает задачу (обычный bat файл), которая пингует вторую часть адресного пространства. Если хотя бы один КЛИЕНТ отозвался, сервер продолжает работать, если все молчат, то он с чистой совестью засыпает. В целом это всё. У меня ещё добавлена проверка активности на сервере торрент клиента. Если он запущен, то сервер не засыпает и не опрашивает КЛИЕНТОВ. Да... Ещё при засыпании в системном журнале Windows создаётся информационное сообщение-событие с кодом 998 и текстом сообщения "No active computers on the network. SERVER turn into SLEEP."
Теперь про реализацию:
дополнительный софт:
psshutdown.exe - довольно древняя программа, которая в зависимости от ключей выключает/усыпляет/гибернирует/перезагружает машину. Саму программу и её описание легко найти в сети.
Создём командный файл, назовём его Check.bat, следующего содержания:
::====================================================================
@Echo Off
::----------------Проверяем запущен ли торрент клиент.------------
::---------------- Если да то завершаем командный файл.------------
tasklist | find /I "utorrent.exe" > nul
if not ERRORLEVEL 1 (GoTo :End)
::-------------------------------------------------------------------------------------------------
::---------------- Подпрограммой CompWork пингуем ------------------------
::---------------- тот самый второй интервал--------------------------------------
Set cWork=0
For /l %%a In (51,1,60) Do Call :CompWork 192.168.1.%%a
If %cWork%==0 (GoTo :stop)
::---------------- Оставляем работать если получен ответ---------------------
GoTo :End
::-------------------------------------------------------------------------------------------------
::---------------- Подпрограмма CompWork --------------------------------------
::-------------------------------------------------------------------------------------------------
:CompWork
Ping -n 1 %1 | find /I "ttl" >Nul
If not ErrorLevel 1 (Goto :ScW1)
GoTo :EOF
:ScW1
:: ---------------- Ответ КЛИЕНТА получен --------------------------------------
Set cWork=1
GoTo :EOF
::-------------------------------------------------------------------------------------------------
::---------------- Конец CompWork -----------------------------------------------------
::-------------------------------------------------------------------------------------------------
:stop
:: ---------------- Нет ответа ---------------------------------------
:: ---------------- Создаём информационное сообщение в системном журнале Windows -------------------
::----------------- с кодом 998, источником Check и сообщением ------------------------------------------------------
::----------------- "No active computers on the network. SERVER turn into SLEEP." --------------------------
eventcreate /t information /id 998 /so Check /l system /d "No active computers on the network. SERVER turn into SLEEP."
:: ---------------- собственно даём команду на засыпание ---------------------------------------
c:\psshutdown -d -t 0
:End
exit
::====================================================================
Здесь после двойного двоеточия - коомментарии.
Проверяемый интервал IP адресов 192.168.1.51-192.168.1.60
Предполагается, что psshutdown.exe лежит в корне C:\
Если проверка работы торрент клиента и создание события в журнале не нужны (выделены синим), то трите их спокойно. Будет работать и без них.
Далее в планировщике задач Windows настраиваем запуск Check.bat через каждые 15 минут.
Наслаждаемся результатом.
Про элегантность не мне судить, но функциональность доказана двумя годами беспроблемной работы.
Как-то так...