Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Контроль стабильности интернета  (Прочитано 2804 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6830
    • Просмотр профиля
Контроль стабильности интернета
« : 27 Август 2013, 15:31:58 »
===== РЕШЕНО =====

Создан скрипт пингующий хост в инете и при отсутствии пинга в течение нескольких (заданных в переменных) секунд выводит сообщение об обрыве канала. После восстановления пинга пишется время восстановления.

(Нажмите, чтобы показать/скрыть)


Всем спасибо за помощь, особенно ArcFi.

=====================


Задача: пинговать 8ки каждую секунду. В случае потери пакета записывать время обрыва инета. После восстановления записывать время восстановления.

Вопрос: как это лучше сделать?

Думаю, что это должен быть фоновый процесс который делает пинг гугла и парсит строку вывода на предмет успешности пинга. По событиям не пришел пакет/пришел пакет пишем время.
На чем писать, баш-скрипт же можно сделать фоновым? Вообще теория верная, если да, дальше буду конкретно куски кода вываливать с вопросами.

Пользователь решил продолжить мысль 27 Август 2013, 15:32:19:
А мб вообще уже все сделали до нас?
« Последнее редактирование: 29 Август 2013, 03:28:15 от ⚡ Thunde® ⚡ »

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12007
  • Xubuntu 18.04 (64bit)
    • Просмотр профиля
Re: Контроль стабильности интернета
« Ответ #1 : 27 Август 2013, 15:51:59 »
Я бы в cron зашедулил простой bash скрипт. Просто писать - прошел пинг или нет с отметкой времени - там уже время обрыва и время восстановления будет видно по записям лога.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Контроль стабильности интернета
« Ответ #2 : 27 Август 2013, 16:26:41 »
Код: Bash
  1. #!/bin/bash
  2.  
  3. HOST="example.com"
  4. WAIT="1"
  5. LOG="/var/log/script.log"
  6.  
  7. while :
  8. do
  9.     ping -qc1 "$HOST" >/dev/null 2>&1 || echo "$(date)" >>"$LOG"
  10.     sleep "$WAIT"
  11. done
« Последнее редактирование: 27 Август 2013, 16:29:37 от ArcFi »

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6830
    • Просмотр профиля
Re: Контроль стабильности интернета
« Ответ #3 : 27 Август 2013, 18:55:59 »
Sly_tom_cat,
ну это первое, что приходит в голову, однако, долбить такой задачей крон не красиво, наверное, запуски частые нужны (каждую секунду).

ArcFi,
Круто, заодно загуглил про строчку /dev/null 2>&1 , а то до того как-то не интересовался)

Теперь мы пишем в лог секунды когда не проходит пинг, но если инета не будет долго, там будет такая простыня, что читать неудобно.
Я сразу представлял, что будет писать время когда инет отвалился и когда появился, типа вот так:

- Ср. авг. 28 00:47:42 YAKT 2013
+ Ср. авг. 28 00:47:43 YAKT 2013
- Ср. авг. 28 00:55:45 YAKT 2013
+ Ср. авг. 28 00:58:34 YAKT 2013
Так сразу видно и как часто пропадает, если очень часто, то это потери пакетов лезут, если большой интервал, значит основательно выход в мир ложился.

Далее, возможность задавать интервал отсутствия пинга, который считать пропажей инета, например пинг не идет 10 секунд, значит отвалился и записывать время восстановления, если пинг проходит 5 секунд подряд.

Например:

TIMEDOWN = 10
TIMEUP = 5

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12007
  • Xubuntu 18.04 (64bit)
    • Просмотр профиля
Re: Контроль стабильности интернета
« Ответ #4 : 27 Август 2013, 19:01:44 »
Для того что бы писалось только время появления и отваливания - нужно явно детектировать эти моменты. Подскажу что одиночный пропавший пинг - еще не факт отваливания связи. Т.е. нужен целый алгоритм (с учетом ложных срабатываний) и все равно некий кеш-файл - в котором хранится кусочек лога с предыдущих пингов (по принципу FIFO очереди).
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Контроль стабильности интернета
« Ответ #5 : 27 Август 2013, 19:26:16 »
Код: Bash
  1. STATUS="UP"
  2.  
  3. if ping -qc1 "$HOST" >/dev/null 2>&1
  4. then
  5.     if [ "$STASTUS" == "DOWN" ]
  6.     then
  7.         STATUS="UP"
  8.         echo "Link $STATUS $(date)" >>"$LOG"
  9.     fi
  10. else
  11.     if [ "$STASTUS" == "UP" ]
  12.     then
  13.         STATUS="DOWN"
  14.         echo "Link $STATUS $(date)" >>"$LOG"
  15.     fi
  16. fi
Примерно так, код не проверял.
Ясен перец, это надо завернуть в цикл.

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6830
    • Просмотр профиля
Re: Контроль стабильности интернета
« Ответ #6 : 27 Август 2013, 20:15:01 »
ArcFi,
да это, понятно, конечно)

И это работает :)

(Нажмите, чтобы показать/скрыть)

Я щас попробовал сделать так, чтобы учитывалось время отсутствия пинга для того, чтобы считать, что инет отвалился или поднялся, не получилось сразу, пойду спать, а то время уже 02.04.

В общем, мб идея гнилая, но логика такая, я просто в синтаксисе плохо ориентируюсь, по справочнику долго. Если есть время попробуйте этот вариант.

UP=$TIMEUP
DOWN=$TIMEDOWN

Если пинг не прошел
Тогда
  UP=TIMEUP
  Если СТАТУС=="+" И --DOWN==0
  Тогда
    СТАТУС="-"
Иначе
  DOWN=TIMEDOWN
  Если СТАТУС=="-" И --UP==0
  Тогда
    СТАТУС="+"


Пользователь решил продолжить мысль 28 Август 2013, 05:24:32:
http://www.opennet.ru/docs/RUS/bash_scripting_guide/c2171.html
Пример 7-1

#!/bin/bash

echo "Проверяется \"0\""
if [ 0 ]      # ноль
then
  echo "0 -- это истина."
else
  echo "0 -- это ложь."
fi            # 0 -- это истина.

echo

echo "Проверяется \"1\""
if [ 1 ]      # единица
then
  echo "1 -- это истина."
else
  echo "1 -- это ложь."
fi            # 1 -- это ложь.

Я получаю:

master@comp-154:~$ ./test
Проверяется "0"
0 -- это истина.

Проверяется "1"
1 -- это истина.


 :o

Пользователь решил продолжить мысль 28 Август 2013, 06:03:49:
В общем получилось у меня сделать то, что вчера описал алгоритмом.
Запись в лог убрал, т.к. это можно сделать при вызове скрипта. Кроме того, иногда удобно сразу видеть результат. И вообще юниксвейно именно так.

(Нажмите, чтобы показать/скрыть)


Осталось разобраться как его запускать в фоне при старте сервера.
« Последнее редактирование: 28 Август 2013, 06:19:17 от ⚡ Thunde® ⚡ »

Оффлайн MuadDlb

  • Участник
  • *
  • Сообщений: 147
  • The Dune Messiah
    • Просмотр профиля
Re: Контроль стабильности интернета
« Ответ #7 : 28 Август 2013, 13:39:04 »
rc.local

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Контроль стабильности интернета
« Ответ #8 : 28 Август 2013, 14:18:37 »
:o
Логические операции в bash отличаются от c.
Для справки:
man test

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6830
    • Просмотр профиля
Re: Контроль стабильности интернета
« Ответ #9 : 28 Август 2013, 14:30:13 »
ArcFi,
Это да. Но я попробовал кусок примера, а он выдает не то, что должен судя по мануалу на опеннете.

Но методом проб этот вопрос был уяснен.


По автозагрузке поддерживаешь rc.local для этого дела?

Т.е. туда надо вогнать а-ля

/admin/testinet >> /admin/testinet.log &

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Контроль стабильности интернета
« Ответ #10 : 28 Август 2013, 14:53:05 »
По автозагрузке поддерживаешь rc.local для этого дела?
Пожалуй, для убyнты сойдёт.
На systemd было бы грамотнее юнитом.

 

Страница сгенерирована за 0.074 секунд. Запросов: 24.