[Frage] Fritzbox per Crontab bei Verbindungsabbruch neu starten

ryman

Neuer User
Mitglied seit
8 Apr 2012
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Guten Tag,

ich habe es jetzt erfolgreich geschafft Freetz zu installieren. Auch Crontab funktioniert, sodass ich die FritzBox zum Beispiel per Skript jeden Tag neu starten kann. Jetzt habe ich das Problem, dass meine Fritzbox (192.168.0.111 im IP-Client-Modus) über DLAN an meinen eigentlichen Router (192.168.0.1) gebunden ist und das diese DLAN Verbindung manchmal Probleme macht und erst wieder funktioniert, wenn ich die FritzBox neu starte.

Theoretisch hatte ich mir das so gedacht:

1. Frage alle 5min ab, ob der Router unter 192.168.0.1 (Ping Abfrage) erreichbar ist.
2. Wenn nicht, starte neu

Leider habe ich kaum Ahnung vom Programmieren:(. Könnte mir vielleicht jemand helfen?

Vielen Dank schonmal!:D
 
Zuletzt bearbeitet:
Moin

Ich mag das Rad auch nicht neu erfinden, auf fritzmod.net hab ich dieses Beispiel gefunden:
Code:
while !(ping -c 1 www.google.de); do sleep 5; done
Wenn google.de nicht zu erreichen ist warte 5 sekunden.
...ändern in...
Code:
while !(ping -c 1 192.168.0.1); do reboot; done
Wenn die IP 192.168.0.1 nicht erreichbar ist starte neu.

Als Skript speichern und in der crontab z.B. so aufzurufen: * * * * * sh name_des_skripts
Das ist eine Endlosschleife, über cron aufgerufen, checkt es solange bis die IP nicht mehr zu erreichen ist.
Wenn nur einmal geprüft werden soll, dann in eine if Abfrage umwandeln.
 
Moin

Ich mag das Rad auch nicht neu erfinden, auf fritzmod.net hab ich dieses Beispiel gefunden:
Code:
while !(ping -c 1 www.google.de); do sleep 5; done
Wenn google.de nicht zu erreichen ist warte 5 sekunden.
...ändern in...
Code:
while !(ping -c 1 192.168.0.1); do reboot; done
Wenn die IP 192.168.0.1 nicht erreichbar ist starte neu.

Als Skript speichern und in der crontab z.B. so aufzurufen: * * * * * sh name_des_skripts
Das ist eine Endlosschleife, über cron aufgerufen, checkt es solange bis die IP nicht mehr zu erreichen ist.
Wenn nur einmal geprüft werden soll, dann in eine if Abfrage umwandeln.

Viele Dank euch beiden. Ich hab jetzt eine reboot.sh erstellt:
Code:
#!/bin/sh
while !(ping -c 1 192.168.0.1); do reboot; done

Wo soll ich die auf der Fritzbox denn speichern, damit crontab die direkt findet?

Edit: Btw: Wie bekomme ich überhaupt Dateien auf die fritzbox geschoben?
 
Zuletzt bearbeitet:
Du hast doch freetz, ich hab meine .profile mit Funktionsdefinitionen vollgepackt.
Wohlgemerkt: Funktionsdefinitionen, keine Funktion wird ausgeführt, es sei denn, .profile wird mit Argument aufgerufen (Name der Funktion).

Mein "arbeitendes Beispiel":

.profile
Code:
usleep () {
if [ -f /bin/usleep ]
then
/bin/usleep $1
return 0
else
ping -W 1 -c 1 127.0.0.1 >/dev/null
return 0
fi
return 1
}

all_off () {
led-ctrl dsl_nicht_verbunden=0
led-ctrl power_off
led-ctrl internet_abgebaut
led-ctrl dect_abgeschaltet
led-ctrl wlan_off
led-ctrl update_led1=0
return 0
}

ltr () {
led-ctrl power_on
usleep $1
led-ctrl power_off
led-ctrl internet_aufgebaut
usleep $1
led-ctrl internet_abgebaut
led-ctrl dect_aktiv
usleep $1
led-ctrl dect_abgeschaltet
led-ctrl wlan_on
usleep $1
led-ctrl wlan_off
led-ctrl update_led1
usleep $1
led-ctrl update_led1=0
return 0
}

rtl () {
led-ctrl update_led1
usleep $1
led-ctrl update_led1=0
led-ctrl wlan_on
usleep $1
led-ctrl wlan_off
led-ctrl dect_aktiv
usleep $1
led-ctrl dect_abgeschaltet
led-ctrl internet_aufgebaut
usleep $1
led-ctrl internet_abgebaut
led-ctrl power_on
usleep $1
led-ctrl power_off
return 0
}

run () {
all_off
ltr $1
rtl $1
return 0
}

crontab
Code:
* * * * * sh /var/mod/root/.profile run
 
Jau, es funktioniert. Dauer zwar 1-2 Minuten bis er bemerkt, dass er neustarten soll, aber das passt schon. Viel Dank, Leute!
 
Zuletzt bearbeitet:
Nö, denn mein Beispiel zeigt nur Funktionsdefinitionen, die die LEDs der Fritz!Box steuern.

.profile
Code:
abandon_ip {
while !(ping -c 1 192.168.0.1); do reboot; done
}

crontab
Code:
* * * * * sh /var/mod/root/.profile abandon_ip
...so halt.

Aber, weil die Funktion eine Endlosschleife ist, würde ich die nicht jede Minute aufrufen, sondern nur um eine festgelegte Uhrzeit.
Code:
1 0 * * * sh /var/mod/root/.profile abandon_ip
...1 Minute nach Mitternacht, jeden Tag.
 
Zuletzt bearbeitet:
Hab ich auch gerade bemerkt. Danke!
 
Code:
abandon_ip {
while !(ping -c 1 192.168.0.1); do reboot; done
}


Aber, weil die Funktion eine Endlosschleife ist, würde ich die nicht jede Minute aufrufen, sondern nur um eine festgelegte Uhrzeit.

Es ist keine Endlosschleife. Eine Endlosschleife ist eine, die endlos läuft (wer hätte das gedacht).
Diese "Schleife" läuft nicht einmal ansatzweise endlos, sie wird höchstens einmal durchlaufen. Entweder das Ping ist erfolgreich, dann wird die Schleife sofort beendet. Oder das Ping ist nicht erfolgreich. Theoretisch würde dann die Schleife wiederholt werden, aber weil reboot ausgeführt wird, kommt es nicht dazu. Eine while Schleife ist in diesem Zusammenhang nicht angebracht.
In Verbindung damit, dass dieser Test einmal am Tag aufgerufen wird, ist das wenig sinnvoll.
Außerdem, wofür sind die Klammern um das ping gut?

@ryman
Ich hatte den ersten Beitrag so verstanden, dass Du bereits cron verwendest und daher cron kennst. Das einzige, was Du brauchst, ist eine Zeile in der crontab:
Code:
*/5 * * * * ping -w5 192.168.0.1 > /dev/null || reboot
 
Ansatzweise kenne ich Cron. Ich habe aber weder Cron noch freetz vorher verwendet. Ist also ein Debüt für mich. Und die Klammern sind sinnvoll, da man so mehrere Funktionen in die Datei schreiben kann. Momentan läuft bei mir die Version koyaanisqatsi mit
Code:
* * * * * sh /var/mod/root/.profile abandon_ip

Da ich ein Internetradio nutze kann ich jetzt perfekt erkennen, wie das in der Praxis abläuft:

1. Radio läuft über das Wlan Netz des Fritzbox Routers
2. Radio bricht ab, da die Verbindung getrennt ist.
3. Radio verbindet sich nach 1-2 Minuten mit dem weiter entfernten Router (Fritzbox ist also aus)
4. Radio verbindet sich wieder mit der Fritzbox nach einer weiteren Minute.

Alles funktioniert also wie gewollt. Natürlich sind die Abbrecher immer noch nervig, aber wenigsten muss ich jetzt nicht immer untern Tisch den Stecker ziehen, sondern kann in Ruhe sitzen bleiben und warten :D Also Danke an die schnelle Hilfe. Nach nicht einmal 24 Stunden ist alles gelöst.
 
Doch das klappt.
Code:
abandon_ip {
while !(ping -c 1 192.168.0.1); do reboot; done
}
 
Ok, es funktioniert, aber eher zufällig, bzw. aus anderen Gründen als Du denkst. Ruf das Skript mal von der Shell aus auf, dann siehst Du die Fehlermeldungen.
Es sollte so aussehen:
Code:
/var/mod/root/.profile: line 1: abandon_ip: not found
PING 192.168.0.1 (192.168.0.1): 56 data bytes

--- 192.168.0.1 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss

Außerdem wird das vermutlich auch ausgeführt, wenn Du Dich anmeldest.
 
Wie auch immet, es funktioniert :D Werd nachher mal nachgucken, ob die Fehlermeldung kommt.
 
Von mir aus kannst Du gerne warten, bis es ein Problem verursacht. Erfahrungsgemäß weiß man dann nicht mehr, was genau los war und sucht dann viel länger danach, als wenn man es gleich in Ordnung bringt.
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,760
Beiträge
2,256,969
Mitglieder
374,788
Neuestes Mitglied
LaceyJerome
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.