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 |
|