Задолбали периодические (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% потерь пакетов. Жду пока опять ляжет сетка - проверить, сработает, или нет. :)
Может кто уже делал такое - поделитесь опытом...
>Задолбали периодические (1-4 раза в месяц) падения сети. Просто переставал пинговаться шлюз,
>хотя соединение pppoe висело. Был на коленке написан такой скрипт:Аналогичная ситуция...
только если инет отваливается то обычно это на долго, поэтому есть запасной канал и такой скрипт на кроне...
если pppoe падает то раутинг переключается и референту и директору отсылается месага если меня нет.
#!/bin/sh
PATH="/sbin:/usr/bin:/bin"
isp=xx.xxx.xxx.xxxcurrent_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
Для скриптов удобнее использовать fping