LINUX.ORG.RU

Избранные сообщения almaste

Проверка наличия соединения с интернетом

Форум — Admin

Необходимо проверять наличие подключения к интернету и если оно на время пропадало, то выполнять определённую команду. Причём физически компьютер подключен к интернету через роутер, поэтому проводное подключение никуда не пропадает.

Пока напрашивается идея пинговать гугл (точнее его 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

Правильно ли так делать и нет ли варианта получше?

KivApple
()