Warten bis das Netzwerk steht

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
rhHeini
Beiträge: 2730
Registriert: 20.04.2006 20:44:10

Warten bis das Netzwerk steht

Beitrag von rhHeini » 03.02.2013 16:15:27

Squeeze AMD64: Ich habe auf meiner Workstation ein Skript laufen dass beim Booten Router und Fileserver per WOL einschalten soll. Funktioniert nur meistens nicht. Ende letzten Jahres kurz nach dem Aufsetzen hats noch meistens funktioniert, inzwischen bleiben die Geräte meistens aus. Lasse ich den Codeschnipsel laufen wenn die Workstation oben ist, gibt es keine Aussetzer beim Starten. Der Code ist also richtig.

Code: Alles auswählen

until cat /sys/class/net/eth0/carrier | grep "1" ; do sleep 1 ; done
sleep 3
/usr/bin/wakeonlan 00:11:6B:35:48:C6
/usr/bin/wakeonlan 90:e6:ba:89:fd:9b
Daraus schliesse ich dass die Methode nach dem Carrier zu schauen nicht (mehr) funktioniert. Könnte sein dass es wegen dem Switch auf den 3.2er Kernel aus den Backports liegt. Habe schon die Wartezeit auf 10s hochgedreht was eigentlich ausreichen sollte. Hilft aber nichts.

Was wäre eine bessere Methode auf den Aufbau der Netzwerkverbindung bem Boot zu warten?

Mfg rh

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Warten bis das Netzwerk steht

Beitrag von syssi » 03.02.2013 16:37:31

Meine Netzwerkkarte ist in der /etc/network/interfaces eingetragen. Diesen Datensatz wuerde ich um die Zeile:

Code: Alles auswählen

up /usr/bin/wakeonlan 00:11:6B:35:48:C6
up /usr/bin/wakeonlan 90:e6:ba:89:fd:9b
erweitern. Hat zur Folge, dass wenn die Netzwerkkarte erfolgreich konfiguriert und aktiviert wurde das WOL ausgefuehrt wird. Man kann natuerlich auch Skripts im Verzeichnis /etc/network/if-up.d/ platzieren.

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: Warten bis das Netzwerk steht

Beitrag von Natureshadow » 03.02.2013 20:28:03

Oder als init-script mit passendem Needs-Start. Die Möglichkeiten sind vielfältig, deine ursprüngliche ist jedoch keine davon :D.

rhHeini
Beiträge: 2730
Registriert: 20.04.2006 20:44:10

Re: Warten bis das Netzwerk steht

Beitrag von rhHeini » 03.02.2013 20:36:11

Ich sollte vielleicht dazu noch erwähnen: der Codeschnipsel ist Teil eines Skript das per cron @reboot läuft. Diese Geschichte mit dem Carrier hab ich mir ergoogelt, war irgendwo als Lösung für das Problem des Wartens bis das Netz da ist angegeben. Und mit dem 2.6er Kernel hats ja auch funktioniert.

Ich verstehe nicht recht warum das cron-Skript nicht klappt. Das sollte doch nach dem Hochlaufen des Rechners ausgeführt werden. Aber es scheint viel zu früh loszulegen.

Ich kann ja mal versuchen das Skript stattdessen mit einem up davor erst mal in die /etc/network/interfaces einzutragen und zu sehen wie das klappt.

Die anderen Möglichkeiten sind so exotisch für mich, dass ich das erst mal lasse.

Gruss, rh

rhHeini
Beiträge: 2730
Registriert: 20.04.2006 20:44:10

Re: Warten bis das Netzwerk steht

Beitrag von rhHeini » 04.02.2013 19:51:41

Der erste Versuch mit dem Skript in /etc/network/if-up.d/ sieht vielversprechend aus. Ich warte noch ein paar Tage und damit Versuche ab ob es zuverlässig geht, bevor ist das Thema als gelöst ansehe.

Mfg rh

rhHeini
Beiträge: 2730
Registriert: 20.04.2006 20:44:10

Re: Warten bis das Netzwerk steht

Beitrag von rhHeini » 05.02.2013 18:46:44

... und heute hats nicht funktioniert. Gestern war noch das cron-Skript aktiv, die Kombo hats wohl irgendwie geschafft.

Jetzt hab ich doch wieder die Carrier-Abfrage scharf gemacht. Mal sehen was passiert.

Mfg rh

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: Warten bis das Netzwerk steht

Beitrag von Natureshadow » 05.02.2013 18:58:39

Woran siehst du eigentlich, ob es funktioniert oder nicht?

rhHeini
Beiträge: 2730
Registriert: 20.04.2006 20:44:10

Re: Warten bis das Netzwerk steht

Beitrag von rhHeini » 06.02.2013 20:06:54

Ich hole mal etwas aus.

Ich habe hier ein kleines Heimnetzwerk mit ein paar PC's der Familienmitglieder, einem Fileserver und einem fli4l-Router der den Internetzugang abriegelt. Sobald alle Clients aus sind, schalten sich auch der fli4l und der Fileserver ab und machen sich WOL-fertig. Wenn dann der erste Client wieder eingeschaltet wird, werden fli4l und Fileserver per WOL wieder aufgeweckt. Klappte mit Windows-Klienten einwandfrei.

Jetzt mit meiner Squeeze-Workstation kriege ich das Spiel nicht zuverlässig hin. Das das Aufwecken nicht funktioniert sehe bzw. höre ich daran das der fli4l sich nicht regt (steht auch unter dem Schreibtisch neben meinem PC, der hat einen Lüfter mit Macke, der ist deutlich zu hören wenn der fli4l läuft, da brauche ich nichts anderes). Ausserdem fehlt der Fileserver, ich sehe dass die nfs-Shares nicht eingehängt sind. Meine Musike geht dann nicht.

Mit der Verlegung des Skripts in die if-up.d hab ich mir wohl keinen Gefallen getan. Als cron-Job @reboot klappte zwar das Aufwecken nicht, aber ich konnte das verkürzte Skript mit dem WOL dann aus einem Terminal aufrufen, nach einem Reboot waren die nfs-Shares dann auch da. Das geht jetzt auch nimmer.

Fazit: Weder als cron-Job @reboot noch in der /etc/network/if-up.d/ funktioniert das. Das Netzwerk steht nicht wenn das Skript abgearbeitet werden soll.

Mfg rh

rhHeini
Beiträge: 2730
Registriert: 20.04.2006 20:44:10

Re: Warten bis das Netzwerk steht

Beitrag von rhHeini » 10.02.2013 22:01:42

Update zu dem Thema:

Habe mehr oder weniger das gleiche Skript unter anderem Namen einmal als cron-Job @reboot und in der if-up.d stehen.

Zusätzlich habe ich bei beiden die Wartezeit nach dem Erkennen des Carriers auf 120s verlängert.

Nur der Cronjob wird überhaupt ausgeführt, und mit der langen Wartezeit funktioniert er wenigstens, d.h. der Rechnerpark wird angestossen und kommt hoch.

Was ich nicht verstehe ist warum das Skript in if-up.d nicht ausgeführt wird. Weiss ich da wieder etwas nicht?

Mit ist beim Durchflöhen der Systemprotokolle aufgefallen dass die Netzwerkkarte ein paar mal an und ausgeschaltet wird bevor das Netz steht. Das ist doch nicht normal, oder? Das ist nicht nur jetzt der Fall, das kommt schon eine ganze Weile.

Code: Alles auswählen

Feb 10 09:25:17 rh020 kernel: [   27.849864] r8169 0000:04:00.0: eth0: link up
Feb 10 09:25:17 rh020 kernel: [   27.855443] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Feb 10 09:25:18 rh020 kernel: [   28.938212] r8169 0000:04:00.0: eth0: link down
Feb 10 09:25:21 rh020 kernel: [   32.339046] r8169 0000:04:00.0: eth0: link up
Feb 10 09:25:22 rh020 kernel: [   33.426147] r8169 0000:04:00.0: eth0: link down
Feb 10 09:25:27 rh020 kernel: [   37.936896] r8169 0000:04:00.0: eth0: link up
Feb 10 09:25:28 rh020 kernel: [   39.025495] r8169 0000:04:00.0: eth0: link down
Feb 10 09:25:31 rh020 kernel: [   42.528320] r8169 0000:04:00.0: eth0: link up
Feb 10 09:25:32 rh020 kernel: [   43.618211] r8169 0000:04:00.0: eth0: link down
Feb 10 09:25:37 rh020 kernel: [   47.938032] r8169 0000:04:00.0: eth0: link up
Feb 10 09:25:38 rh020 kernel: [   49.028904] r8169 0000:04:00.0: eth0: link down
Feb 10 09:25:40 rh020 kernel: [   51.639583] r8169 0000:04:00.0: eth0: link up
Ich warte auf Kommentare, schönen Sonntag,

Mfg rh

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Warten bis das Netzwerk steht

Beitrag von syssi » 10.02.2013 23:05:19

Es gibt zwei einfache Moeglichkeiten zu ueberpruefen, ob ein Skript ueber irgendeinen Mechanismus aufgerufen wurde. Die schoenere Moeglichkeit sieht so aus:

Code: Alles auswählen

logger "ich wurde augefrufen"
Diese Nachricht findet sich zum entsprechenden Zeitpunkt dann im syslog wieder.

Code: Alles auswählen

echo $(date)"ich wurde aufgerufen" > /tmp/output
Legt die Datei /tmp/output an und enthaelt entsprechende Ausgabe. Damit solltest du deine Scripts entsprechend debuggen koennen. Wenn dein Interface erstmal einige Zeit braucht, um sich zu berappeln und immer wieder den Carrier verliert bevor es ordentlich verfuegbar ist, dann gibts fuer dich lieder keine schoene Loesung (auf Carrier warten).

Stattdessen koenntest du in Intervallen das WOL-Packet verschicken (direkt nach dem ersten Carrier) und dann in den naechsten 60-120 Sekunden einige Male, bis die geweckte Gegenstelle dann wirklich erreichbar/pingbar ist. Danach kannst du dir sicher sein, dass dein WOL-Packet auch wirklich angekommen ist und dein Router so frueh wie nur moeglich gestartet wurde. ;-) Viel Erfolg!

Gruss syssi

Antworten