Необходимо проверять наличие подключения к интернету и если оно на время пропадало, то выполнять определённую команду. Причём физически компьютер подключен к интернету через роутер, поэтому проводное подключение никуда не пропадает.
Пока напрашивается идея пинговать гугл (точнее его DNS 8.8.8.8, чтобы не тратить времени на разрешение доменного имени) с интервалом 5-10 секунд (нужна хорошая скорость реакции) и, если наступает таймаут (надо как-то ещё прибивать пинг, если нет ответа пару секунд, а то он сам выкинет ошибку слишком поздно).
Как это идеалогически верно сделать, чтобы поменьше ресурсов жрало? Ещё же надо куда-то записывать последний результат проверки, чтобы заметить, что интернет вновь появился.
Или вдруг уже существуют готовые решения и мне не надо велосипедить?
P.S.: Пока есть такая идея: для CRON интервал слишком маленький, поэтому сделать скрипт такого содержания и запускать его после загрузки системы:
1. Выполнить пинг. Сохранить в переменную результат (был ли ответ за 2 секунды или нет).
2. Сравнить эту переменную с другой переменной. Если есть отличие (сейчас всё ок, а раньше интернета не было), то выполнить команду.
3. Записать в ту, другую, переменную текущее значение.
4. Уснуть на 10 секунд и перейти к началу цикла.
Вопрос в том как выполнить пункт 1 и правильна ли моя идея (нет ли варианта получше).
P.P.S.: Написал такой скрипт:
#!/bin/bash
last_state=1
while true; do
ping -c 1 -W 2 8.8.8.8 > /dev/null
state=$?
if [ "$last_state" -ne "$state" ]; then
if [ "$state" -eq "0" ]; then
echo "Internet connected!"
else
echo "Internet disconnected!"
fi
fi
last_state=$state
sleep 10s
done
Правильно ли так делать и нет ли варианта получше?