Wake on LAN (WOL) включаем сервер по сети

Понадобилось, в свете последних событий, связанных с отключениями света, настроить автоматическое выключение и включение сервера. Бесперебойник обычный – не smart, поэтому програмную часть берем на себя. Логика простая и зависит от нескольких условий:

  1. если устройство-цель (лучше несколько) в сети не отвечает то выключаем сервер, например через 3-5 минут
  2. если устройство-цель в сети появилось, то после некоторой задержки (мало ли) включаем сервер

Для этого настраиваем mikrotik и готовим сервер.

Алгоритм:

  • Создаем скрипт
  • Подключаем Планировщик

System –> Script –> New (например check_power_TST)

:local m; :set $m "$[ /ping count=5 192.168.1.55 ]"; :put $m;
:if ($m > 3) do={ /tool wol interface=bridge mac=54:04:A6:35:A3:B6 }

:local m – назначаем локальную переменную
:set – значением которой будет результат выполнения команды ping
:put – вывести в консоль (это для проверки, потом убрать)
:if – условие, если оно совпадает, то выполнить “do” – разбудить наш сервер

System –> Sheduler –> New

На сервере в cron прописан скрипт, который мониторит наличие в сети хоста. Если хост не в сети (пропало питание)  выключить ПК.

# crontab -l
...
*/3 * * * * /home/svm/bin/shutdown.sh >/dev/null 2>&1
...
# cat shutdown.sh
#!/bin/bash
ip=192.168.1.55
ping_cmd="/usr/bin/ping -c 3 $ip > /dev/null 2>&1"
eval $ping_cmd

if [[ $? != 0 ]];
   then /usr/sbin/shutdown -h now
fi

Здесь, если не успешное [[ $? != 0 ]] выполнение команды ping (т.е. хост не доступен) запускает выключение сервера.

Можно воспользоваться на время тестирования скриптом, и меняя значение ip проверить поведение

#!/bin/bash
#If ping not saccess do shutdown tst

ip=192.168.1.55
ping_cmd="/usr/bin/ping -c 3 $ip > /dev/null 2>&1"
eval $ping_cmd

if [[ $? = 0 ]]; 
   then echo The Host $ip is UP!
   else echo ALARM! The Host $ip is DOWN!
fi

Также можно добавить уведомления в Telegram

image_pdfimage_print

Leave a Reply

Your email address will not be published. Required fields are marked *