ppp Verbindung per Script abfragen.
ppp Verbindung per Script abfragen.
Debian Sarge, Kernel 2.4.22
Bin leider gar kein Meister was Scripte angeht, habe folgendes Anliegen:
Mein Server ist über T-DSL eingewählt, und ich bräuchte jetzt ein Script, das per Crontab alle 30 min schaut ob er noch Online ist, und wenn nicht sich neu einwählt.
Wie befrage ich den Rechner ob er online ist und lass ihn wenn nicht wieder einwählen.
Vielen Dank
Sebastian
Bin leider gar kein Meister was Scripte angeht, habe folgendes Anliegen:
Mein Server ist über T-DSL eingewählt, und ich bräuchte jetzt ein Script, das per Crontab alle 30 min schaut ob er noch Online ist, und wenn nicht sich neu einwählt.
Wie befrage ich den Rechner ob er online ist und lass ihn wenn nicht wieder einwählen.
Vielen Dank
Sebastian
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
Viele (extrem viele ) Wege führen hier nach Rom...
z.B.: Alle halbe Stunde ein Ping (nur ein Paket (ObQuote: "Geben Sie mir *ein* Ping!")) an einen Server im Internet abfeuern. Wenn das nicht zurückkommt, ist die Leitung wahrscheinlich weg.
z.B.: Die Ausgabe von ifconfig überprüfen, ob das Device ppp0 noch existiert. Wenn nein, ist die Leitung tot. Das funktioniert aber nur, wenn die Leitung sich nicht aufgehängt hat (sprich: ist noch verbunden, überträgt aber keine Daten mehr).
Eine Kombination aus den Methoden könnte auch sinnvoll sein: Erst ifconfig checken. Wenn ppp0 fehlt, ist die leitung eh hin: Redial. Wenn ppp0 da ist: Einmal pingen. Wenn das nicht geht: auflegen, redial.
Alles nur beispielhaft.
Übrigens kann man pppd auch so einstellen, dass er sich von selbst wieder einwählt, wenn die Verbindung wegfällt. Das sollte die sauberste Lösung sein...
Patrick
z.B.: Alle halbe Stunde ein Ping (nur ein Paket (ObQuote: "Geben Sie mir *ein* Ping!")) an einen Server im Internet abfeuern. Wenn das nicht zurückkommt, ist die Leitung wahrscheinlich weg.
z.B.: Die Ausgabe von ifconfig überprüfen, ob das Device ppp0 noch existiert. Wenn nein, ist die Leitung tot. Das funktioniert aber nur, wenn die Leitung sich nicht aufgehängt hat (sprich: ist noch verbunden, überträgt aber keine Daten mehr).
Eine Kombination aus den Methoden könnte auch sinnvoll sein: Erst ifconfig checken. Wenn ppp0 fehlt, ist die leitung eh hin: Redial. Wenn ppp0 da ist: Einmal pingen. Wenn das nicht geht: auflegen, redial.
Alles nur beispielhaft.
Übrigens kann man pppd auch so einstellen, dass er sich von selbst wieder einwählt, wenn die Verbindung wegfällt. Das sollte die sauberste Lösung sein...
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
für pdreker:
sorry für das doppelte post, ich dachte nur es wäre besser unter internetrouter untergebracht, und bevor ich den thread löschen konnte waren die antworten schon da. kommt nicht mehr vor
Wie frage ich genau ab damit ich eine verwertbare true/false Antwort bekomme.
(hab sowas noch nie gemacht)
ifconfig | grep ppp ?
wie kann ich dann eine Entscheidung machen ?
Mit der Bitte um ein Beispiel
Sebastian
sorry für das doppelte post, ich dachte nur es wäre besser unter internetrouter untergebracht, und bevor ich den thread löschen konnte waren die antworten schon da. kommt nicht mehr vor
hab ich eigendlich gemacht, wenn er sich beendet habe ich ein script in /etc/ip-up.d/ gelegt, das 5 sekunden später wieder reingeht. trotzdem ist es in 3 Monaten 4 mal vorgekommen das keine verbindung da warÜbrigens kann man pppd auch so einstellen, dass er sich von selbst wieder einwählt
Wie frage ich genau ab damit ich eine verwertbare true/false Antwort bekomme.
(hab sowas noch nie gemacht)
ca. so habe ich das gedacht, aber wie machen ?Eine Kombination aus den Methoden könnte auch sinnvoll sein: Erst ifconfig checken. Wenn ppp0 fehlt, ist die leitung eh hin: Redial. Wenn ppp0 da ist: Einmal pingen. Wenn das nicht geht: auflegen, redial.
ifconfig | grep ppp ?
wie kann ich dann eine Entscheidung machen ?
Mit der Bitte um ein Beispiel
Sebastian
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
Es gibt da irgendwo bei pppd eine explizite Option, dass er sich bei Verbindungsverlusst immer wieder einwählen soll. Kein externes Skript oder so nötig. Wenn man die Retry Begrenzung abschaltet, versucht er es so lange, bis er wieder drin ist...
Das sollte eigentlich dafür sorgen, dass der pppd extrem hartnäckig versucht die Verbindung wieder aufzubauen...
Patrick
Code: Alles auswählen
# Terminate after n consecutive failed connection attempts.
# A value of 0 means no limit. The default value is 10.
maxfail 0
# Do not exit after a connection is terminated; instead try to reopen
# the connection.
persist
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
habe das ganze in /etc/ppp/options geändert, wenn es das tut was es soll ist das wirklich eine Super Sache . . .
(wegen firewallscript und trafficshaping die ja immer auf ppp0 gehen)
Vielen Dank
Sebastian
wenn ich das richtig interpretiere dann bleibt das Interface auch immer auf ppp0, oder ?Do not exit after a connection is terminated; instead try to reopen
# the connection.
(wegen firewallscript und trafficshaping die ja immer auf ppp0 gehen)
Vielen Dank
Sebastian
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
@pdreker:
Soweit die Theorie In der Praxis ist es leider so, daß sich dr pppd durch das Zwangsdisconnect manchmal wegfliegt. Dies scheint allgemein bekanntes Problem zu sein (der Anzahl von diesbezüglichen Treffern bei Google nach urteilen) und es scheint leider noch keine saubere Lösung zu geben. Und wenn der pppd weg ist, dann nützt auch die Option nichts mehr.
Hier war vor wenigen Tagen ein entsprechnder Post im Forum, wo das jemand per inittab und respawn gemacht hat. Werde es mir bei Gelegenheit auch mal raussuchen und ausprobieren (dann brauch in in meiner Abwesenheit nicht meinen Sohn per Telefon zu einem 'Affengriff' am Router bewegen um an meine Mails zu kommen). Vielleicht schreib ich das ja dann mal ins Wiki.
Soweit die Theorie In der Praxis ist es leider so, daß sich dr pppd durch das Zwangsdisconnect manchmal wegfliegt. Dies scheint allgemein bekanntes Problem zu sein (der Anzahl von diesbezüglichen Treffern bei Google nach urteilen) und es scheint leider noch keine saubere Lösung zu geben. Und wenn der pppd weg ist, dann nützt auch die Option nichts mehr.
Hier war vor wenigen Tagen ein entsprechnder Post im Forum, wo das jemand per inittab und respawn gemacht hat. Werde es mir bei Gelegenheit auch mal raussuchen und ausprobieren (dann brauch in in meiner Abwesenheit nicht meinen Sohn per Telefon zu einem 'Affengriff' am Router bewegen um an meine Mails zu kommen). Vielleicht schreib ich das ja dann mal ins Wiki.
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de
xmpp:bert@debianforum.de
- mistersixt
- Beiträge: 6601
- Registriert: 24.09.2003 14:33:25
- Lizenz eigener Beiträge: GNU Free Documentation License
Oder bau ein kleines Script, das per crontab jede Minute gestartet wird und überprüft, ob es noch ein ppp Device gibt:
Dann könnte man es - falls es nicht mehr läuft - nachstarten.
Gruss, mistersixt.
Code: Alles auswählen
darkstar:~# STATUS=`cat /proc/net/dev | grep ppp0`
darkstar:~# if [ "${STATUS}" = "" ]; then echo "down"; else echo "up"; fi
up
darkstar:~#
Gruss, mistersixt.
Eine gute Sache ! Wegen dem Script eine Frage
Das hab ich mir mal daraus gebastelt, das es so nicht läuft weiß ich selbst, nur meine Frage ist wie ich zwei if Routinen ineinander Schachteln kann.
Aus früheren Basic Zeiten schimmert noch grob eine Vorstellung von elseif, wie geht das unter Linux.
Gilt das fi als Beendigung der if Routine oder als Ende des ganzen Scriptes ?
Und wie kann ich eine Ausgabe in einer Datei hintereinander in eine Zeile einfügen ?
Einmal hat er den Zwangsdisconnect schon Problemlos mit persist in der /etc/ppp/options überwunden. Nur zur Info
Vielen Dank
Sebastian
Code: Alles auswählen
STATUS=`cat /proc/net/dev | grep ppp0`
if [ "${STATUS}" = "" ]
then
echo "pppd ist down" >> /shared/ppperror.log
date >> /shared/ppperror.log
echo "starte Interface pppd neu" >> /shared/ppperror.log
/etc/init.d/ppp start >> /shared/ppperror.log
sleep 1
pon
sleep 2
STATUS=`cat /proc/net/dev | grep ppp0`
if ["${STATUS}"=""]
then
echo "starten von pppd nicht möglich" >> /shared/ppperror.log
else
echo "starten von pppd erfolgreich" >> /shared/ppperror.log
fi
echo "" >> /shared/ppperror.log
else
fi
Aus früheren Basic Zeiten schimmert noch grob eine Vorstellung von elseif, wie geht das unter Linux.
Gilt das fi als Beendigung der if Routine oder als Ende des ganzen Scriptes ?
Und wie kann ich eine Ausgabe in einer Datei hintereinander in eine Zeile einfügen ?
Einmal hat er den Zwangsdisconnect schon Problemlos mit persist in der /etc/ppp/options überwunden. Nur zur Info
Vielen Dank
Sebastian
Zuletzt geändert von knecht am 30.04.2004 21:08:56, insgesamt 1-mal geändert.
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
"fi" ist natürlich ein "endif", sonst hieße es ja anders (komischerweise ist das ende von "for" "done" und nicht "rof" . Verschachteln geht ganz normalknecht hat geschrieben:Gilt das fi als Beendigung der if Routine oder als Ende des ganzen Scriptes ?Und wie kann ich eine Ausgabe in einer Datei hintereinander in eine Zeile einfügen ?
Code: Alles auswählen
if ...; then
if yyy; then
echo bla;
fi
echo blubb
fi
Code: Alles auswählen
echo Hallo > /tmp/test #Erstellen/Überschreiben
echo Welt >> /tmp/test #Anhängen
Mein Script sieht jetzt so aus:
Den Teil Verbindung prüfen habe ich aus folgendem Topic
http://www.debianforum.de/forum/viewtop ... +else+ping
das script funktioniert aber ich habe folgende Verständnissfrage:
Ich verstehe diese Abfrage nicht, einen Ping machen, ins nichts schicken und was bedeutet dann die if abfrage genau.
Danke
Sebastian
Code: Alles auswählen
#Schauen ob das Interface noch da ist
STATUS=`cat /proc/net/dev | grep ppp0`
if [ "${STATUS}" = "" ]
then
date >> /shared/ppperror.log
echo "Error: pppd ist inaktiv" >> /shared/ppperror.log
echo -n "Versuche neustart von pppd . . . " >> /shared/ppperror.log
/etc/init.d/ppp start
sleep 1
STATUS=`cat /proc/net/dev | grep ppp0`
if [ "${STATUS}" = "" ]
then
echo "fehlgeschlagen" >> /shared/ppperror.log
else
echo "erfolgreich" >> /shared/ppperror.log
fi
#Verbindung überprüfen
sleep 8
echo -n "Verbindung testen . . . " >> /shared/ppperror.log
ping -c 1 194.25.2.129 > /dev/null
if [ $? -eq 0 ]
then
echo "erfolgreich" >> /shared/ppperror.log
else
echo "fehlgeschlagen" >> /shared/ppperror.log
fi
echo "" >> /shared/ppperror.log
fi
http://www.debianforum.de/forum/viewtop ... +else+ping
das script funktioniert aber ich habe folgende Verständnissfrage:
Code: Alles auswählen
ping -c 1 194.25.2.129 > /dev/null
if [ $? -eq 0 ]
Danke
Sebastian
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
- mistersixt
- Beiträge: 6601
- Registriert: 24.09.2003 14:33:25
- Lizenz eigener Beiträge: GNU Free Documentation License
$? ist das Ergebnis des vorangegangenen Befehls. Steht da eine 0 drin, war der Befehl erfolgreich. Steht da was anderes drin (eine 1 zum Beispiel), ist der vorangegangene Befehl mit einem Fehler geendet.
Sprich: Du setzt einen einzigen ping ab (-c 1), wenn Du ein Reply bekommst - also das Internet "offen" ist - , dann steht in $? eine 0, sonst <> 0 !
Gruss, mistersixt.
Sprich: Du setzt einen einzigen ping ab (-c 1), wenn Du ein Reply bekommst - also das Internet "offen" ist - , dann steht in $? eine 0, sonst <> 0 !
Gruss, mistersixt.
OK, eine feine Funktion, vielen Dank . . .
Also bis jetzt mußte das Script noch nicht einspringen, pppd und persist funktioniert bei mir jetzt schon 2 Tage ohne die an anderen Stellen im Forum beschriebenen Probleme.
Debian Sarge, und DSL bei Telekom
Vielen Dank euch allen für die Hilfe
Sebastian
Also bis jetzt mußte das Script noch nicht einspringen, pppd und persist funktioniert bei mir jetzt schon 2 Tage ohne die an anderen Stellen im Forum beschriebenen Probleme.
Debian Sarge, und DSL bei Telekom
Vielen Dank euch allen für die Hilfe
Sebastian
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
Code: Alles auswählen
*/10 * * * * if ! test `ps acx | grep pppd | grep -v grep | cut -c0-6` ; then /etc/init.d/ppp restart > /dev/null ; fi
-
- Beiträge: 180
- Registriert: 27.01.2002 21:48:08
- Lizenz eigener Beiträge: GNU General Public License
Ich hab das bei mir etwas komisch gelöst, aber es funktioniert und ist einfach
Auf meinem Router liegt das Shellscript /etc/ppp/ip-down.d/do_up
mit folgendem Inhalt:
Sobald die Verbindung getrennt wird, wird durch "pon dsl-provider" die Neueinwahl veranlasst.
Gruss
Jochen
Auf meinem Router liegt das Shellscript /etc/ppp/ip-down.d/do_up
mit folgendem Inhalt:
Code: Alles auswählen
#!/bin/sh
pon dsl-provider
Gruss
Jochen
Hatte ich auch mal so, aber ich hab die Erfahrung gemacht das es ratsam ist ein sleep 3 vor pon einzubauen einzubauen. (manche Provider sind da ein bißchen eigen)
Trozdem war manchmal die Verbindung nicht da, und ich mußte sie von Hand starten.
Aber mit persist mode des pppd und dem Script oben geht es jetzt wunderbar.
(auch wenn mir bis jetzt schon ein mal der pppd prozess wegen persist gestorben ist, aber das Script hat es aufgefangen)
gruß
Sebastian
Trozdem war manchmal die Verbindung nicht da, und ich mußte sie von Hand starten.
Aber mit persist mode des pppd und dem Script oben geht es jetzt wunderbar.
(auch wenn mir bis jetzt schon ein mal der pppd prozess wegen persist gestorben ist, aber das Script hat es aufgefangen)
gruß
Sebastian
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
- Raoul
- Beiträge: 1435
- Registriert: 20.05.2003 00:16:35
- Lizenz eigener Beiträge: neue BSD Lizenz
-
Kontaktdaten:
Noch ein anderer Ansatz: Gucken, ob es eine pid Datei (für die Verbindung, nicht für den pppd!) gibt. Das sagt zwar nicht wirklich was darüber aus, ob die Verbindung auch Pakete übertragen kann, aber mit ich fahre mit folgendem seit Monaten fehlerfrei:
Wird einmalig beim Systemstart gestartet bzw. läßt sich über die init ein und ausschalten.
Raoul
Code: Alles auswählen
#!/bin/sh
while true
do
test -f /var/run/dsl-provider.pid || pon dsl-provider
sleep 15
done
Raoul
Code: Alles auswählen
grep -ir fuck /usr/src/linux
Ich hab auch seit Monaten ruhe mit der persist option in der /etc/ppp/options Datei, und einen minütlichen crontab mit dem Script:
Ich lasse mir halt zur Überwachung das ganze immer in eine Datei protokollieren (>> /shared/ppperror.log), und es gab bei mir mit perist entgegen den Erfahrungen hier im Forum in 3 Monaten nur 2 mal ein Absterben des pppdämons.
Code: Alles auswählen
#!/bin/sh
#Schauen ob das Interface noch da ist
STATUS=`cat /proc/net/dev | grep ppp0`
if [ "${STATUS}" = "" ]
then
date >> /shared/ppperror.log
echo "Error: pppd ist inaktiv" >> /shared/ppperror.log
echo -n "Versuche neustart von pppd . . . " >> /shared/ppperror.log
/etc/init.d/ppp start
sleep 1
STATUS=`cat /proc/net/dev | grep ppp0`
if [ "${STATUS}" = "" ]
then
echo "fehlgeschlagen" >> /shared/ppperror.log
else
echo "erfolgreich" >> /shared/ppperror.log
fi
#Verbindung überprüfen
sleep 8
echo -n "Verbindung testen . . . " >> /shared/ppperror.log
ping -c 1 194.25.2.129 > /dev/null
if [ $? -eq 0 ]
then
echo "erfolgreich" >> /shared/ppperror.log
else
echo "fehlgeschlagen" >> /shared/ppperror.log
fi
echo "" >> /shared/ppperror.log
fi
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de