@karpo518

Как с помощью bash-скрипта выполнить ping в момент потери интернет соединения?

На домашнем ПК с OS Linux Mint есть регулярные кратковременные сбои в оптоволоконном интернет-соединении. Для диагностики ТП провайдера попросила выполнить ping 4 ip-адресов в момент возникновения проблемы. Как я уже сказал, проблемы с интернетом кратковременные, и я не могу мониторить их вручную. Я бы хотел запустить на компьютере bash-скрипт, который будет мониторить информацию о статусе интернет соединения и в случае возникновения проблемы выполнит ping нужных ip-адресов. ping должен выполняться с момента возникновения проблемы до возобновления соединения + 1 минуту. Результат в виде данных о переданных и потерянных пакетах, т.е. весь лог команд ping нужно записать в 4 текстовых файла. Полагаю, что здесь ничего сложного, но у меня нет достаточного опыта в написании таких скриптов. Можете поделиться примером?
  • Вопрос задан
  • 1336 просмотров
Пригласить эксперта
Ответы на вопрос 3
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
IMHO проще просто запустить четыре ping-а с сохранением ошибок в файлы, а после перерыва Интернета убить всё ёще ping-ующие процессы, файлы скормить тех-поддержке.
Запускать например так:
ping -i5 -n 127.0.0.1 | grep -v ' time=' >ping1.log 2>&1 &
ping -i5 -n 127.0.0.2 | grep -v ' time=' >ping2.log 2>&1 &
ping -i5 -n 127.0.0.3 | grep -v ' time=' >ping3.log 2>&1 &
ping -i5 -n 127.0.0.4 | grep -v ' time=' >ping4.log 2>&1 &

А убить:
killall ping
IP-шники 127.0.0.X догадаетесь заменить на свои адреса?

P.S. Нормально ушедшие-вернувшие запросы в лог-файл НЕ ПОПАДУТ. Зато и файл не распухнет до неимоверных размеров.
Ответ написан
Комментировать
xotkot
@xotkot
хорошо есть и хорошо весьма
для скриптов и мас пинга проще использовать утилиту fping
fping -l IP1 IP2 IP3 IP4
для перенаправления вывода в файл вместе с ошибками:
fping -l IP1 IP2 IP3 IP4 &> ip.log.txt

также для наглядного мониторинга есть утилита mtr
mtr 8.8.8.8
echo -e "IP1\nIP2\nIP3\nIP4" | mtr -rw -F - > mtr-report

обрываем по Ctrl+c либо добавляем в команду ключ регулирующий количество запросов, например -с5

пример однострочника:
while fping -q 8.8.8.8 ; do echo "Ok";sleep 2; done && echo "Связь пропала" && fping -l IP1 IP2 IP3 IP4 &> ip.log.txt

запускаем в терминале когда сеть работает нормально и как только пропадёт пинг к гугловскому днс 8.8.8.8 (можно использовать другой адрес) то автоматом запустится fping по четырем адресам, как наберется статистика обрываем команду вручную Ctrl+c или в другом терминале прибить данный процесс, все данные сохранятся в файле ip.log.txt что будет лежать рядом со скриптом
Ответ написан
Комментировать
@Karpion
Я полагаю, что проще всего просто запустить пинги при старте системы, направив их вывод в программу-парсер (см.ниже). а вывод парсера - в файл.

Парсер проще всего писать на AWK, Perl, Python - что лучше знаете. Программа читает с stdin поток данных в буфер; пока все нормально, буфер просто ротируется (старые записи-строки сбрасываются, новые помещаются на их место; буфер надо примерно на пять строк); при возникновении сбоя - буфер пишется на stdout и сразу туда начинают писаться сообщения о сбое; при исправлении сбоя - на stdout пишется ещё сколько-то сообщений. Ну и stdout перенаправлен в файл.

Либо совсем тупо: писать вывод пинга в файл, а потом вырезать из файла нужные куски.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы