Задолбали периодические (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% потерь пакетов. Жду пока опять ляжет сетка - проверить, сработает, или нет. :)
Может кто уже делал такое - поделитесь опытом...