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


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

Автор Тема: [BASH] - Скрипт автоматического изменения маршрутов  (Прочитано 5261 раз)

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

Оффлайн El Scorpio

  • Автор темы
  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
Добрый день, прошу помощи в решении следующей проблемы
На работе есть прокси-сервер и два канала связи:
172.25.46.1 - спутниковый модем с большим лимитом предоплаченного трафика и очень большим пингом (около секунды)
172.25.46.254 - ADSL-модем с быстрым пингом, малым лимитом и периодической нестабильностью соединения.

Также есть ряд сайтов, созданных с применением новейших откатно-распилочных технологий. Эти сайты содержат множество скриптов, которые генерируют множество мелких запросов, каждый из которых за счёт большого пинга выполняется нецензурное количество времени.
Можно было бы просто прописать на прокси маршруты через DSL, но это соединение в нашей сельской местности временами работает ещё медленее (или не работает вовсе). В связи с чем планирую написать скрипт, который будет периодически мониторить DSL и переключать маршруты.

Основной алгоритм такой
1. Пинг маршрутизаторов обоих провайдеров и сравнение результатов
2. Если результат DSL лучше, то добавление маршрутов к сайтам по списку (из файла)
3. Если результат DSL хуже, то удаление маршрутов к сайтам по списку (из файла)

По первому пункту. Команда ping выдаёт следующий результат
Цитировать
11 packets transmitted, 10 received, 9% packet loss, time 10852ms
rtt min/avg/max/mdev = 789.661/1015.057/1258.212/156.293 ms, pipe 2
Указанный результат выводится в файл (на RAM-диск, дабы жёсткий до дыр не протереть )
Как выделить из него процент потерянных пакетов и среднее время передачи?

P.S.
man sed прошу не писать...

Оффлайн Nesmit

  • Старожил
  • *
  • Сообщений: 1296
    • Просмотр профиля
а в чем проблема?
пингуем ресурс, пинги есть значитса "route add -net ....."
если нет, то на оборот. "route del -net ....."

#!/bin/bash
echo "пингуем"
ping="/bin/ping"
# сетевые адре
IP1=212.188.4.10
is1=`$ping -c 5  $IP1 | grep -c "64 bytes"`

# Проверяем прошли ли пинги
if !(test $is1 -gt "0")
then
#Пингов нет
echo "Инет сдох!"
/etc/init.d/xl2tpd stop

sleep 5
killall xl2tpd
sleep 5
ifconfig                                                                                                             
                                                                                                                     
#маршрут l2tp сервера                                                                                                 
route add -host       l2tp.corbina.net gw 10.70.0.1                                                                   
#Удаляем маршрут по умолчанию
ip route del default
ip route add default via 10.70.0.1

/etc/init.d/xl2tpd start
ifconfig
#Пишем в лог
echo "Отвалился_инет  `date`" >> /home/nes/otval_linka.log
#exit 1;
fi

exit 0;


Оффлайн El Scorpio

  • Автор темы
  • Участник
  • *
  • Сообщений: 158
    • Просмотр профиля
Цитировать
а в чем проблема?
пингуем ресурс, пинги есть значитса "route add -net ....."
если нет, то на оборот. "route del -net ....."
Проблема в том, что иногда время прохождения сигнала по второй линии связи превышает все разумные пределы. Было бы глупо переключаться с канала в 1000 мс на канал в 1500 мс  :)

На другом сайте подсказали код
Цитировать
   
извлечение процента потерянных пакетов из строки
sed 's/[^0-9 ]//g;q' | awk '{print $3;}')
извлечение среднего пинга из строки
sed 's%\/%\ %g' | sed 's/[^0-9 ]//g;q' | awk '{print $2;}' )

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

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

Если кто-нибудь найдёт ошибку или сможет улучшить его, буду очень признательным
Если кому-то захочется использовать сей "объект авторского права", пользуйтесь на здоровье :)

Оффлайн Nesmit

  • Старожил
  • *
  • Сообщений: 1296
    • Просмотр профиля
За что люблю Linux, так за то что любая проблема решаема, если чуток подумать. =)

 

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