#!/usr/bin/perl # # Watchdog-script um einen Server up zu halten. # #use strict; my $lastfile = "/etc/ppp/keepup.last.log"; my $upfile = "/etc/ppp/keepup.up.log"; # Beim jedem Systemstart muss diese Datei geloescht werden!!! my $interface = `ifconfig ppp0 2> /dev/null`; if($interface) { my @ping = ( '207.46.134.190', #www.microsoft.com '64.4.43.7', #www.hotmail.com '217.12.3.11', #www.yahoo.de '216.205.72.211' #www.scogroup.com ); # Wenn das Interface up ist, so wird gepingt um einem Timeout vorzubeugen :-) my $random = int(rand($#ping) + 1); system("ping -c 1 $ping[$random] &> /dev/null"); system("rm -f $lastfile") if(-f $lastfile); system("touch $upfile") unless(-f $upfile); } else { # War das Interface bereits up, so wird nicht einfach versucht # eine Verbindung aufzubauen, sondern zusaetzlich nach einer # bestimmten Anzahl an erfolgslosen Verbindungsversuchen das # System komplett neu gebootet in der Hoffnung damit wieder # Online gehen zu koennen. my $try = 0; if(open(LOG,"<$lastfile")) { ($try) = ; $try =~ s/[^0-9]//g; close(LOG); } if($try > 0 || -f $upfile) { $try++; if($try < 200) { if(open(LOG,">$lastfile")) { print LOG $try; close(LOG); } } if($try == 12 || $try == 180) { # 12=2h oder 180=30h (bei einem Verbinugsversuch alle 10 Minuten) system("reboot"); exit; } } # Versuchen online zu gehen wenn das Internet-interface nicht up ist. system("pon"); }