Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » Ubuntu

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Kernell32



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

#!/bin/bash
 
 
log="/var/log/routing.log"
check_period="15s"
 
 
clear_log()
 {
   if [ !-f${log} ]
    then
        touch ${log}
    else
        cat /dev/null > ${log}
    fi
 }
 
 
init()
 {
 
  activ=0
  gw1="111.111.111.111"
  gw2="192.168.10.1"
  prefered_gw=${gw1}
  dev_if1="eth1"
  dev_if2="wlan1"
  if1="111.111.111.112"
  if2="192.168.10.27"
   
  gw1_curr_status=0
  gw2_curr_status=0
   
  gw1_curr_packet_loss=0
  gw2_curr_packet_loss=0
   
  gw1_max_packet_loss=30
  gw2_max_packet_loss=30
 }
 
 
 
 clear_log
 echo `date +"%T %d.%m.%Y"`."--------cheking status-------------------|" >>${log}
 echo "                                                              " >>${log}
 
 
check_isp2()
 {
  gw2_curr_packet_loss=`ping -I ${dev_if2} -c2 -q -W3 ${gw2} |grep loss |awk '{print $6}' |cut -d "%" -f1`
 
  echo `date +"%T %d.%m.%Y"`."ISP 2 Check Result packet_loss = ${gw2_curr_packet_loss}" >> ${log}
 
  if [[ "${gw2_curr_packet_loss}" == *+* ]];
    then
        echo `date +"%T %d.%m.%Y"`."ISP 2 Status is BAD" >>${log}
        gw2_curr_status=0
        return
  fi
 
 
  if [ "${gw2_curr_packet_loss}" -lt "${gw2_max_packet_loss}" ];
   then
       gw2_curr_status=1
       echo `date +"%T %d.%m.%Y"`."ISP 2 Status is OK" >>${log}
       return
       
       else
           gw2_curr_status=0
           echo `date +"%T %d.%m.%Y"`."ISP 2 Status is BAD" >>${log}
           return
   fi
 
 }
 
 
check_isp1()
 {
  if [ ${activ} -eq 0 ]  
   then
  gw1_curr_packet_loss=`ping -I ${dev_if1} -c3 -q -W3 195.137.201.73 |grep loss |awk '{print $6}' |cut -d "%" -f1`
  if [[ "${gw1_curr_packet_loss}" == *+* ]];
   then
       gw1_curr_packet_loss=`ping -I ${dev_if1} -c3 -q -W3 ${gw1} |grep loss |awk '{print $6}' |cut -d "%" -f1`
       
#       echo "gw1-curr-packet-loss = " ${gw1_curr_packet_loss}
       if [[ "${gw1_curr_packet_loss}" == *+* ]]
         then
             echo `date +"%T %d.%m.%Y"`."ISP 1 Status is BAD or unplugged ethernet cable-------------" >>${log}
             gw1_curr_status=0
             return
       fi
       if [ "${gw1_curr_packet_loss}" -le "${gw1_max_packet_loss}" ]
             then
                 gw1_curr_status=0
                 echo `date +"%T %d.%m.%Y"`."ISP 1 Status BAD >>> ${gw1} - ok,  but 195.137.201.73 unavailable" >> ${log}
                 return
             else
                 gw1_curr_status=0
                 echo `date +"%T %d.%m.%Y"`."ISP 1 Status BAD >>> ${gw1} -  unavailable" >> ${log}
                 return
           fi
       fi
  fi
 
 
 
  if  [ ${activ} -eq 0 ]
   then
       gw1_curr_packet_loss=`ping -I ${dev_if1} -c3 -q -W3 ${gw1} |grep loss |awk '{print $6}' |cut -d "%" -f1`
       
       if [ "${gw1_curr_packet_loss}" -lt "${gw1_max_packet_loss}" ]
         then
             gw1_curr_packet_loss=`ping -I ${dev_if1} -c3 -q -W3 195.137.201.73  |grep loss |awk '{print $6}' |cut -d "%" -f1`
             echo `date +"%T %d.%m.%Y"`."ISP 1 Status is Good packet_loss = ${gw1_curr_packet_loss}" >>${log}
             gw1_curr_status=1
             return
 
       fi
 
       if [ "${gw1_curr_packet_loss}" -ge "${gw1_max_packet_loss}" ]
             then
                 echo `date +"%T %d.%m.%Y"`."ISP 1 Status is Bad >>"."${gw1}"." - ok, but 195.137.201.73 packet_loss = ${gw1_curr_packet_loss}" >>${log}
                 gw1_curr_status=0
                 return
            fi
       fi
 
  if [ ${activ} -eq 1 ]  
   then  
       gw1_curr_packet_loss=`ping -I ${dev_if1} -c3 -q -W3 ${gw1} |grep loss |awk '{print $6}' |cut -d "%" -f1`
#       echo "gw1-curr-packet-loss = " ${gw1_curr_packet_loss}
       if [[ "${gw1_curr_packet_loss}" == *+* ]]
         then
             echo `date +"%T %d.%m.%Y"`."ISP 1 Status BAD >>>". "${gw1}"." -its unavailable" >> ${log}
             gw1_curr_status=0
             return
#       else
        fi
 
       if [ "${gw1_curr_packet_loss}" -lt "${gw1_max_packet_loss}" ];
            then
                /sbin/ip route replace default via ${if1} dev ${dev_if1}
                tmpgw=`ping -I ${dev_if1} -c3 -q -W3 195.137.201.73 |grep loss |awk '{print $6}' |cut -d "%" -f1`
#                echo "tmpgw = " ${tmpgw}
 
                if [[ "${tmpgw}" == *+* ]];
                  then
                      echo "tmpgw = " ${tmpgw}
                      echo `date +"%T %d.%m.%Y"`."ISP 1 Status BAD >>>". "${gw1}". " -its ok,  but 195.137.201.73 unavailable" >> ${log}
                      gw1_curr_status=0
                      /sbin/ip route replace default via ${if2} dev ${dev_if2}
                      return
                fi
 
                if [ "${tmpgw}" -gt "${gw1_max_packet_loss}" ]  
                 then  
                     echo `date +"%T %d.%m.%Y"`."ISP 1 Status BAD >>> ${gw1} -it's ok,  but 195.137.201.73 unavailable" >> ${log}
                     gw1_curr_status=0
                     /sbin/ip route replace default via ${if2} dev ${dev_if2}
                     return
                fi
 
                if [ "${tmpgw}" -lt "${gw1_max_packet_loss}" ]
                 then  
                     gw1_curr_status=1
                     echo `date +"%T %d.%m.%Y"`."ISP 1 Status Recover(Good) >>> ${gw1} -it's OK" >> ${log}
                     /sbin/ip route replace default via ${if2} dev ${dev_if2}
                     return
                fi
           else
               echo `date +"%T %d.%m.%Y"`."ISP 1 Status BAD >>> ${gw1} -it's unavailable" >> ${log}
               gw1_curr_status=0
               /sbin/ip route replace default via ${if2} dev ${dev_if2}
               return
           fi
       fi
 }
 
 
 swith_gw()
 {
  curr_gw=`ip route show |grep default |awk '{print $3}'`
 if [ "${curr_gw}" == "${prefered_gw}" ] && [ "${gw1_curr_status}" -eq 1 ]
   then
       echo `date +"%T %d.%m.%Y"`."GateWay ISP 1 GoodWork" >> ${log}
       return
 fi
 
 
 
##_replace GW1-->GW2
 
if [ "${curr_gw}" == "${prefered_gw}" ] && [ "${gw1_curr_status}" -eq 0 ] && [ "${gw2_curr_status}" -eq 1 ] && [ "${activ}" -eq 0 ]
        then  
            echo `date +"%T %d.%m.%Y"`."GateWay ISP 1 -bad-->replace" >> ${log}
            /sbin/ip route replace default via ${gw2} dev ${dev_if2}
            echo `date +"%T %d.%m.%Y"`."Replace ${gw1} ---> ${gw2} ok" >> ${log}
            activ=1
            /usr/bin/crontab -r
            /etc/megafon.sh
            killall wget
            echo "Active = ${activ}" >>${log}
            return
        fi
 
 
      if [ "${activ}" -eq 1 ] && [ "${gw1_curr_status}" -eq 1 ]
        then
            echo `date +"%T %d.%m.%Y"`."GateWay ISP 1 recover-->replace" >> ${log}
            /sbin/ip route replace default via ${gw1} dev ${dev_if1}
            echo `date +"%T %d.%m.%Y"`."Replace ${gw2} ---> ${gw1} ok" >>${log}
            activ=0
            /etc/ulink.sh
            /usr/bin/crontab /etc/download.txt
            echo "Active = ${activ}" >>${log}
           return
      fi
 
 
 
 
###replace GW2-->GW1
 
 if [ "${gw1_curr_status}" -eq 0 ] && [ "${gw2_curr_status}" -eq 0 ]
  then  
      echo `date +"%T %d.%m.%Y"`." ALL GateWay is DOWN ..............." >>${log}
      return
 fi
 }
 
 
#initialization
 
 
init
 while [ 1 ]
  do
    check_isp2
    check_isp1
    swith_gw
    sleep ${check_period}
  done

Всего записей: 359 | Зарегистр. 22-12-2007 | Отправлено: 09:32 11-03-2014 | Исправлено: Kernell32, 22:04 11-03-2014
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » UNIX » Ubuntu


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru