Computer-Status über Fritz!Box abfragen ?

desk12

Neuer User
Mitglied seit
11 Mai 2006
Beiträge
38
Punkte für Reaktionen
0
Punkte
0
Hi Leute,
also ich besitze eine 1und1-Fritz!Box 7170 und 7270 ( keine Änderungen vorgenommen-original ).
Meine Frage ist, ob es möglich wäre, dass die FB einen Rechner überprüft ( z.B. über einen Ping ) ob dieser noch funktionsfähig ist oder sich evtl. aufgehängt hat. Falls der Computer sich aufgehängt hat, sollte die FB eine vorher zugewiesene Rufnummer wählen. Anhand der Nummer von der FB kann ich dann erkennen, das mit dem Rechner irgendwas nicht stimmt und ich kann sofort reagieren.
Für so etwas gibt´s natürlich auch entsprechende Hardware, die aber leider auch entsprechend viel kostet.
Wäre echt genial wenn sowas mit der FB zu realisieren wäre.
 
Ping und Nummer wählen sind mit ein paar Zeilen Shellscript auf der Box zu machen, z.B.

Code:
NUMMER=4797400
ADRESS=192.168.10.12
while ( true ) do
  ping -c 1 $ADRESS > /dev/null
  if [ $? -ne 0 ] 
  then
    echo "Jetzt waehl ich die Nummer"
    echo ATD$NUMMER | nc localhost 1011 > /dev/null
  fi
  sleep 10
done

Den sleep kann man auch noch verlängern, z.B. auf 30 Sekunden.
 
:wiejetzt:
Hi chked,

was muß ich in dem Code denn abändern ?

Nummer= Ist das irgendeine meiner Rufnummern in der FB ?
Adresse= Ich denke mal das ist die IP des Rechners an dem die FB den Ping sendet ?

und in Zeile 7
echo "Jetzt waehl ich die Nummer"
( Muß ich den Text "Jetzt waehl ich die Nummer" mit der Rufnummer ( z.B. meiner Handy-Nummer ) ersetzen ?

War das dann wirklich schon alles ?

Und wie bekomme ich den Code dann auf die Fritz!Box ? :confused:
Sorry für die dumme Frage, aber bin Neuling auf dem Gebiet.
:oops:
 
Ob man mit einem Ping zuverlässig erkennen kann, ob ein Rechner hängt wage ich mal zu bezweifeln. Es wird mit Sicherheit einige Situationen geben, bei der der Rechner noch auf Ping antworten kann, aber alles andere eben hängt.
 
Der Hintergrund ist folgender:
An diesem Rechner sind über den seriellen Anschluß einige Geräte angeschlossen, die ständig mit dem Rechner kommunizieren. Also Signale die an den Rechner und von dem Rechner an die Geräte gesendet werden.
Beim letzten mal als sich der Rechner aufgehängt hat, funktionierten auch die angeschlossenen Geräte nicht mehr.
Daher denke ich, das das mit dem Ping funktionieren könnte. Einen Versuch ist es wert.
 
Nummer= Ist das irgendeine meiner Rufnummern in der FB ?
Die externe Nummer, die die Fritzbox wählen soll.
Adresse= Ich denke mal das ist die IP des Rechners an dem die FB den Ping sendet ?
so ist es.

echo "Jetzt waehl ich die Nummer"
Der Text wird lediglich zum Testen auf der Konsole ausgegeben.

Und wie bekomme ich den Code dann auf die Fritz!Box ?
Am besten, wenn du einen USB-Stick an die Box anschliesst. Dann kannst du die Datei von einem beliebigen Rechner dort hinkopieren. Zum Starten des Scripts brauchst du einen Telnet-Zugang zur Box, automatisch starten lässt sich das Script per debug.cfg. Such mal nach beiden Begriffen.

War das dann wirklich schon alles ?
Jein. Das Script enthält noch einen Fehler. Wenn der Rechner nicht antwortet, wählt es immer wieder die Nummer an. Die korrigierte Version wartet mit dem erneuten Wählen, bis der Rechner wenigstens einmal wieder da war.

Code:
NUMMER=4797400
ADRESS=192.168.10.12
while ( true ) do
  ping -c 1 $ADRESS > /dev/null
  if [ $? -ne 0 ] 
  then
    echo "Jetzt waehl ich die Nummer"
    echo ATD$NUMMER | nc localhost 1011 > /dev/null
    while ( true ) do
      ping -c 1 $ADRESS > /dev/null
      if [ $? -eq 0 ]
       then
        break;
      fi
      sleep 10
    done
  fi
  sleep 10
done
 
Ich habe das Script gerade ausprobiert und bekomme folgende Fehlermeldung:
Code:
 line 3: syntax error: word unexpected (expecting "do")
Mach' ich was falsch oder stimmt der Script nicht ganz ?
 
Zuletzt bearbeitet:
Ok,

werde ich diese Woche mal ausprobieren. Ich melde mich wieder um ein Feedback zu geben ob´s geklappt hat oder nicht.

Danke schon mal für die schnelle Antwort chked.
 
Hab nochmal eine Frage zum obigen Code:
Muß ich nach "nc localhost" statt der "1011" die IP meiner FritzBox eintragen ?
 
localhost = ist schon gleich deiner ip auf der fritzbox
1011 ist hier nur der Port...
 
Ok, danke. Dann kann ich es also auf 1011 stehen lassen.
 
Danke für dieses Script.
Weil es hier keine weiteren Antworten mehr gibt, ist das Problem wohl inzwischen gelöst.
Kann mir bitte jemand etwas auf die Sprünge helfen?

Ich versuche, das Script so zu ändern, dass bei erfolgreichem Ping die 8880 gewählt wird, bei erfolglosem die 8881. Und das jeweils nur ein mal, bis sich die Ping-Antwort geändert hat.
(Die 8880 und 8881 wertet dann Asterisk aus.
Bisher habe ich es mit einer Switchbox gemacht, die aber immer wieder die DECT-Verbindung zur Fritzbox verliert und deswegen jetzt in Rente gehen soll.)

Ich habe es auch schon erfolglos mit zwei getrennten Scripts probiert, indem ich -ne gegen -eq getauscht habe.
(Außerdem habe ich den Ping geändert in ping -w 1 -c 1 $ADRESS > /dev/null .)

Ich scheitere, wie damals auch eisbaerin schon daran:
line 4: syntax error: word unexpected (expecting "do")


Code:
#!/bin/sh
NUMMER=8880
ADRESS=192.168.178.21
while [COLOR="darkred"]true; do[/COLOR]
  ping -w 1 -c 1 $ADRESS > /dev/null
  if [ $? -eq 0 ] 
  then
    echo "Umleitung aus"
    echo ATD$NUMMER | nc localhost 1011 > /dev/null
    while[COLOR="darkred"] true; do[/COLOR]
      ping -w 1 -c 1 $ADRESS > /dev/null
      if [ $? -ne 0 ]
       then
        break;
      fi
      sleep 10
    done
  fi
  sleep 10
done
Code:
#!/bin/sh
NUMMER=8881
ADRESS=192.168.178.21
while[COLOR="darkred"] true; do[/COLOR]
  ping -w 1 -c 1 $ADRESS > /dev/null
  if [ $? -ne 0 ] 
  then
    echo "Umleitung ein"
    echo ATD$NUMMER | nc localhost 1011 > /dev/null
    while[COLOR="darkred"] true; do[/COLOR]
      ping -w 1 -c 1 $ADRESS > /dev/null
      if [ $? -eq 0 ]
       then
        break;
      fi
      sleep 10
    done
  fi
  sleep 10
done
 
Zuletzt bearbeitet:
Also bei mir lag es daran, daß ich die Zeilenenden nicht UNIX gerecht hatte.
Läuft seit dem hervorragend.
 
Ich würde es ma damit in Zeile 4 probieren:
Code:
while true; do

EDIT:
Und auch das was Eisbär(in) schreibt, sollte man beachten. (Ich hasse das Windows-Notepad dafür! Gut das es Alternativen gibt... )
 
Zuletzt bearbeitet:
Danke
Ich hatte es mit Ultraedit gemacht, aber weil ich das Script über Windows dort eingefügt hatte, waren die Zeilenenden falsch.
Jetzt muss ich es nur noch irgendwie in ein Script bekommen.
Programmierer müsste man sein, ...
 
Richtig ist "while true; do", wie schon SaschaBr schreibt. Die andere Form kann so noch nie funktioniert haben.
Zeile 10 muss ebenfalls geändert werden.
 
Vielen Dank.
Ich habe in #12 die Scripts so geändert, wie hier empfohlen und es läuft jetzt, wie gewünscht.
Ob es wirklich nur die Nummer wählt, wenn sich der Ping ändert, muss ich aber noch abwarten.
Beides in einem Script wäre zwar schöner, aber ich glaube, dass die Fritzbox kein Problem damit hat, beide Scripts gleichzeitig laufen zu lassen.
 
Zuletzt bearbeitet:
Jedes von den beiden Skripten wartet schon darauf, dass der Rechner erreichbar ist und darauf, dass er nicht mehr erreichbar ist. Du könntest jeweils in der Zeile vor "break" die entgegengesetzte Aktion unterbringen.
 
Danke, genial,
so scheint es jetzt alle meine Wünsche zu erfüllen:
8880.sh
Code:
#!/bin/sh
trap '' SIGHUP 
NUMMER=8880
NUMMER2=8881
ADRESS=192.168.178.21
while true; do
  ping -w 1 -c 1 $ADRESS > /dev/null
  if [ $? -eq 0 ] 
  then
    echo "Umleitung aus"
    echo ATD$NUMMER | nc localhost 1011 > /dev/null
    while true; do
      ping -w 1 -c 1 $ADRESS > /dev/null
      if [ $? -ne 0 ]
       then
         echo "Umleitung ein"
         echo ATD$NUMMER2 | nc localhost 1011 > /dev/null
        break;
      fi
      sleep 10
    done
  fi
  sleep 10
done

Es gibt leider noch ein Problem.
Das Script beendet sich nach ein paar Minuten.

Inzwischen habe ich
trap '' SIGHUP
bei der debug.cfg und bei dem Script selbst hinzugefügt.
Von der debug.cfg führe ich ein Script aus, das dieses Script startet.
Wenn ich es manuell starte. läuft es ohne abzubrechen.
Ohne trap '' SIGHUP
läuft es leider gar nicht aus der debug.cfg

debug.cfg:
Code:
#!/bin/sh
trap '' SIGHUP
 # # # # # Warten bis USB-Stick gemountet ist
max=5
i=0
while [ $i -lt $max ]; do
	if mount | grep " on /var/media/ftp/" > /dev/null; then
		break
        fi
        let i=$i+1
        sleep 10
done

USBSTICK=$(mount | grep /var/media/ftp/ | sed -e "s|^.*ftp/||g" -e "s/ .*$//")
#
# # # # # ENDE USB-Stick Warteschleife

/var/media/NEW_LINK/FRITZ/8881.sh

8881.sh
Code:
#!/bin/sh
trap '' SIGHUP
/var/media/NEW_LINK/FRITZ/8880.sh &

Aus lauter Verzweiflung habe ich an meine 8880.sh einfach noch diese Zeile angehängt:
/var/media/NEW_LINK/FRITZ/8881.sh
und die Zeilen mit echo "Umleitung ... in der 8880.sh auskommentiert.
Anfangs wurde die falsche Nummer gewählt, aber wenn ich sich erstmal eingelaufen hat, scheint es normal zu laufen.
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.