Понадобилось, в свете последних событий, связанных с отключениями света, настроить автоматическое выключение и включение сервера. Бесперебойник обычный – не smart, поэтому програмную часть берем на себя. Логика простая и зависит от нескольких условий:
- если устройство-цель (лучше несколько) в сети не отвечает то выключаем сервер, например через 3-5 минут
- если устройство-цель в сети появилось, то после некоторой задержки (мало ли) включаем сервер
Для этого настраиваем 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