Линукс и DevOps Дни
2.13K subscribers
108 photos
8 videos
194 links
Самобытно про разработку, devops, linux, скрипты, тестирование, сисадминство, техдирство, пиэмство и за айтишную жизу.
Download Telegram
На пути к умноватому дому напишем простой ip watchdog на баш. Будем мониторить наличие интернета и перезапускать роутер, если он "завис".

#!/bin/bash
declare -i COUNTER=0
declare -r P=1m # задержка между пингами или циклами

function EXECUTE(){ echo $COUNTER Need execute ; }

while :;do
COUNTER+=1
for LNK in "ya.ru" "youtube.ru" "list.ru" "vk.com" "8.8.8.8" \
"2ns.info" "aliexpress.com" "yandex.ru" "77.88.8.8" "ozon.ru" \
"8.8.4.4" "gmail.com" "mail.ru" "ok.ru" "youtube.com";do
ping -c1 -w2 $LNK > /dev/null 2>&1
if [[ $? -eq 0 ]];then
COUNTER=0
sleep $P
fi
done

case $COUNTER in
0) continue;;
2|5|10|15|20|40|60|90|120|180|300) EXECUTE;;
600) COUNTER=300; EXECUTE;;
esac
sleep $P
done
#--


COUNTER - счетчик циклов присутствия проблемы.

P=1m - задержка в цикле 1 минута

function EXECUTE() - функция, в которой прописываем действия для устранения проблемы.

for LNK in ... done в цикле пингуем адреса, и если хотя бы один ответ получили, сбрасываем счетчик проблем в 0 и выдерживаем паузу. Если ответ на ping не получили без задержек переходим к следующему адресу.

Адреса на ping не проверял. Проверяйте, добавляйте, изменяйте сами.

ping -c1 - один пакет -w2 - время ожидания 2 сек

Таким образом, если все адреса отвечают - каждый из них пингуется раз в 15 минут (задержка * количество адресов). Если отвечает только 1 - пинговаться он будет ежеминутно. Не хорошо, но не критично.

case $COUNTER in ... esac самый удобный оператор для множественных условий.

Если проблем нет ($COUNTER=0) сразу возвращаемся к пингам. Если проблема есть попробуем ее решить (перезагрузить роутер, например).

Попытки будут предприниматься с нарастанием времени на 2,5,...300 циклах.

600) COUNTER=300...;; - далее попытки проводятся через 300 циклов. Вообще-то строку "600) COUNTER=300; EXECUTE;;" можно было бы заменить на "599) COUNTER=299;;" с сохранением логики работы. Но оставил более понятный вариант.

Прошу обратить внимание, что цикл чуть больше минуты, когда все хорошо, но когда ping не получает ответа - время ~ 2 сек. То есть время fail-цикла = задержка + (число адресов * 2сек) ~ 1мин 30 сек.

Ну, и теперь самое интересное.

На aliexpress ищем "usb relay". (одиночный < 200 рублей).

Качаем и ставим драйвера и пишем что-то вроде:

declare -r HEX_CODE_OFF='\xA0\x01\x01\xA2'
declare -r HEX_CODE_ON='\xA0\x01\x00\xA1'
#use ls /dev/ttyUSB* ###############################
declare -r USB_DEV=/dev/ttyUSB0
echo -n -e $HEX_CODE_OFF > $USB_DEV
sleep 30
echo -n -e $HEX_CODE_ON > $USB_DEV


Подключаем релюху (контакты NO) в разрыв провода питания роутера - и автомат готов.

PS от Ромы — НО будьте аккуратны, чтобы ёбом не токнуло!


tags: #homework #DIY © by Tagd Tagd

🔔