URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 54682
[ Назад ]

Исходное сообщение
"скрипт для передёргивания pppoe-соединения по недоступности шлюза"

Отправлено defan , 22-Мрт-05 04:00 
Задолбали периодические (1-4 раза в месяц) падения сети. Просто переставал пинговаться шлюз, хотя соединение pppoe висело. Был на коленке написан такой скрипт:

#!/usr/bin/perl

my $gateway='1.2.3.4';  # insert yours
my $packetsize=64;
my $count=5;
my $pidfile='/var/run/tun0.pid';
my $ppplogfile='/var/log/ppp.log';

print "Pinging gateway ($gateway) for $count packets by $packetsize bytes...\n";

my $rc=system("/sbin/ping -c $count -s $packetsize $gateway");

print "Result: $rc\n\n";

if ($rc != 0) {
print "Attempting to restart PPP daemon (rc=$rc)...\n";

if (!-e $pidfile) {
   print "$pidfile not found, attempting to start PPP daemon...\n";
   system("/usr/sbin/ppp -ddial eleks");
   exit;
}

my $pppid=`/bin/cat $pidfile`;
chop($pppid);
print "PPP PID is $pppid, killing...\n";
if (kill TERM, $pppid) {
   print "Killed, waiting for \"PPP terminated\" in $ppplogfile...\n";
   my $n=0; my $success=0;
   for ($n=0;$n<=30;$n++) {
     print "Try #$n... ";
     my $s=`/usr/bin/tail -3 $ppplogfile`;
     if ($s =~ m/ppp terminated/i) {
       print "found.\n\n";
       $success=1;
       last;
     }
     print "not present.\n";
     sleep 1;
   }
   if ($success) {
     print "Starting PPP daemon...\n";
     system("/usr/sbin/ppp -ddial eleks");
     exit;
   } else {
     die "Seems like PPP was not terminated successfully...\n\n";
   }
} else {
   die "cannot kill $pppid!\n";
}
} else {
  print "Nothing to do, seems like all wonderful! (rc=$rc)\n";
}

Вызываю из крона каждые 10 минут. Пока только спамит о том что всё хорошо. Кстати ping возвращает 0 и при 20-40% потерь пакетов. Жду пока опять ляжет сетка - проверить, сработает, или нет. :)

Может кто уже делал такое - поделитесь опытом...


Содержание

Сообщения в этом обсуждении
"скрипт для передёргивания pppoe-соединения по недоступности ..."
Отправлено supafly , 22-Мрт-05 10:00 
>Задолбали периодические (1-4 раза в месяц) падения сети. Просто переставал пинговаться шлюз,
>хотя соединение pppoe висело. Был на коленке написан такой скрипт:

Аналогичная ситуция...
только если инет отваливается то обычно это на долго, поэтому есть запасной канал и такой скрипт на кроне...
если pppoe падает то раутинг переключается и референту и директору отсылается месага если меня нет.


#!/bin/sh
PATH="/sbin:/usr/bin:/bin"
isp=xx.xxx.xxx.xxx

current_now=`route | grep default | awk '{print $2}'`
echo -n "ping over ISP:"
ping -c 3 $isp >/dev/null 2>&1
if [ $? -eq 0 ]; then
                 echo "[OK]"
         echo -n "checking route... :"
         route | grep default | awk '{print $2}'
                  if [ $? -ne 0 ]; then
           route add default gw 172.16.0.7
          else
           echo "[route OK]"
          fi            
        else
                echo " [FAILED]"
                
        if [ $current_now = zyxel ]; then
          echo "[keeping]"
        else
          echo "[switching]"
          route del default
          route add default gw 192.168.1.1
                  cat /usr/scripts/msg | /usr/bin/smbclient -M=REFERENT
          cat /usr/scripts/msg | /usr/bin/smbclient -M=DIREKTOR                  
        fi
fi


"скрипт для передёргивания pppoe-соединения по недоступности ..."
Отправлено _KAV_ , 22-Мрт-05 15:01 
Для скриптов удобнее использовать fping