Es ist relativ einfach die Fritzbox dazu zu bringen, beliebige Domains auf ihre Funktion zu überwachen. Mir war es dazu wichtig, keine Änderungen oder Besonderheiten an den Domains einzustellen. Diese sollten so bleiben, wie sie sind. Gleichwohl wollte ich nicht nur den Web-Server überwachen, also nur eine Art Ping ausführen. Diese Überwachung sollte den Apache, PHP und MySQL möglichst einfach und effektiv überwachen. Und die FritzBox ist dazu ideal, da sie immer online ist und sich sowieso meist langweilt.
Was brauchen wir:
Ein alten USB Stick (dieser ist nötig, damit wir der FritzBox nicht den Speicher klauen müssen)
microperl (kann gleich auf den USB-Stick kopiert werden)
Zur Erläuterung:
In der Shell (dazu muss man mit Telnet auf die FritzBox rauf!) kann man mit:
wget http://www.mirco-brahmann.de/ eine Domain sozusagen abfragen. Das heißt es wird ähnlich wies es auch ein Brwoser tut der Inhalt der Site geholt. Hier in diesem Beispiel wird ein File: index.html erzeugt. Das geht übrigens nur in einem Verzeichnis, wo wir auch Schreibrechte haben, also z.B. /var (machen wir also zuvor ein cd /var).
wget -O – http://www.mirco-brahmann.de/ gibt direkt aus!
mit: wget -O – http://www.mirco-brahmann.de/ |grep „<title>“ bekommt man nur die Titelzeile angezeigt. Also habe ich mir ein kleines Perl Skript gebastelt, welches die gewünschten Seiten zyklisch abprüft.
Da ein get mit microperl nicht zu laufen zu bekommen war, habe ich das oben beschriebene wget der Fritzbox verwendet.
#!/var/media/ftp/Intenso-Rainbow-11/microperl -I /var/media/ftp/Intenso-Rainbow-11/microperl/lib
#############################################
#——————————————————————————-
print „Content-type: text/html\n\n“;
#print „<html><h1>Hello!</h1></html>\n“;
#use Time::Local; ////das geht mit microperl leider nicht so einfach, also zumides hab ich das nicht geschafft.
#use LWP::Simple;
$ZYKLUSZEIT=120; # Alle zwei Minuten. (120)
$Server{„rhs“}= „http://www.1rhs-berlin.de“; # 1. zu überwachende Domian
$pText{„rhs“}= „1. RHS Berlin – 1. Rettungshundestaffel Berlin“; # Suchtext für die 1. Domain …. na ja und so weiter…
$Server{„hsv“}= „http://hsvmarienfelde.de“;
$pText{„hsv“}= „HSV Marienfelde e. V. im DVG“;
$Server{„ivory“}= „http://ivory-flat.de“;
$pText{„ivory“}= „Ivory’s Seite“;
$Server{„idova“}= „http://www.mirco-brahmann.de“;
$pText{„idova“}= „Mirco's Blog“;
while(1)
{
#——————————————————-
# Ermitteln des Datums und der Uhrzeit für ein Zyklus
#
($sec,$min,$hours,$day,$month,$year)=localtime(time);
$year=$year+1900; $month=$month+1;
if ($min < 10) { $min = „0$min“; }
if ($hours < 10) { $hours = „0$hours“; }
if ($month < 10) { $month = „0$month“; }
if ($day < 10) { $day = „0$day“; }
#——————————————————-
foreach $ourl (keys %Server)
{
print“$day.$month.$year-$hours:$min:$sec „;
print „$ourl $Server{$ourl} „;
#$tmpget= get($Server{$ourl});
$tmpget= `wget -O – $Server{$ourl}`;
if($tmpget=~/$pText{$ourl}/)
{
print „Site Ok!\n“;
#hier kann der Status geschrieben werden…
}
else
{
print „Fehler!\n“;
$err= system(„/sbin/mailer -s Server:_$ourl -f userIhr\@gmx.de -t userIhr\@gmx.de -m mail.gmx.de -a userIhr\@gmx.de -w *****“);
print „Mail gesendet! $err\n“;
#print „$tmpget \n“;
#hier kann der Fehler Status geschrieben werden…
}
}# FOREACH
foreach (1..8)# Hier werden die 120 Sek. Wartezeit /8 geteilt,
{ # für Aktionen die doch öffter ausgeführt werden sollen.
sleep $ZYKLUSZEIT/8;
}# FOREACH 1..4
}# WHILE
Gestartet wird dann so (damit das Programm auch gleich im Hintergrund läuft ein & am Ende)
/var/media/ftp/Intenso-Rainbow-11/microperl/microperl /var/media/ftp/Intenso-Rainbow-11/microperl/serverwache.pl &
Weitere Hinweise:
http://www.ip-phone-forum.de/showthread.php?t=114888
Es gibt auch: http://www.foo.be/docs/tpj/issues/vol5_3/tpj0503-0003.html, war mir aber zu aufwendig! Usage: ./microperl [switches] [--] [programfile] [arguments] -0[octal] specify record separator (\0, if no argument) -a autosplit mode with -n or -p (splits $_ into @F) -C[number/list]enables the listed Unicode features -c check syntax only (runs BEGIN and CHECK blocks) -d[:debugger] run program under debugger -D[number/list]set debugging flags (argument is a bit mask or alphabets) -e program one line of program (several -e's allowed, omit programfile) -f don't do $sitelib/sitecustomize.pl at startup -F/pattern/ split() pattern for -a switch (//'s are optional) -i[extension] edit <> files in place (makes backup if extension supplied) -Idirectory specify @INC/#include directory (several -I's allowed) -l[octal] enable line ending processing, specifies line terminator -[mM][-]module execute "use/no module..." before executing program -n assume "while (<>) { ... }" loop around program -p assume loop like -n but print line also, like sed -P run program through C preprocessor before compilation -s enable rudimentary parsing for switches after programfile -S look for programfile using PATH environment variable -t enable tainting warnings -T enable tainting checks -u dump core after parsing program -U allow unsafe operations -v print version, subversion (includes VERY IMPORTANT perl info) -V[:variable] print configuration summary (or a single Config.pm variable) -w enable many useful warnings (RECOMMENDED) -W enable all warnings -x[directory] strip off text before #!perl line and perhaps cd to directory -X disable all warnings
FritzBox per FTP ansprechen mit Telnet auf die Ftitzbox rauf unf ‚ftpd -D‘ starten.
In der etc/passwd den Path für ftpUser ändern, sonst kommt immer die Meldung: kann in Verz. nicht wechseln.
/var/media/ftp/Intenso-Rainbow-11/microperl