Wer einen Raspberry Pi mit USB-WLAN-Stick (z. B. Edimax) im 24/7-Betrieb laufen hat, der kennt das Problem: Sobald der WLAN-Hotspot auch nur kurzzeitig weg ist – sei es durch übermäßigen Traffic durch andere Teilnehmer oder durch Nachtabschaltung -, schaltet das WLAN-Plugin des RasPi ab. Man hat dann keine Chance mehr, administrativ per SSH auf den Raspberry zuzugreifen und es hilft nur ein harter Reset oder „Stecker raus – Stecker rein“, um das Ding neu zu starten und online zu bringen. Mehr als einmal ist es mir schon passiert, dass ich auf die Art die SD-Card zerschossen habe.
Nun habe ich mir endlich mal die Zeit dafür genommen, nach Abhilfe für dieses Problem zu suchen. Auf einem alten Raspberry Pi 2B hab ich seit Ewigkeiten einen kleinen Webserver laufen, dessen Inhalte auch brav bei Bing & Co. indexiert werden. Es ist schon passiert, dass die Webseiten in den Suchmaschinen nicht mehr gelistet wurden, weil der RasPi von mir unbemerkt mehrmals einige Tage nicht mehr am Netz hing – ich schaue ja nicht ständig nach dem zart-bläulichen Blinken der WLAN-LED. Die Suchmaschinen-Bots schauen gelegentlich mal nach, was es bei mir so Neues gibt, erreichen den Server nicht und folgerichtig fliegen die Seiten aus dem Index. Und per Cronjob das Ding in loser Folge neustarten zu lassen, („falls mal was sein sollte“) erschien mir auch recht unprofessionell.
Ich hab mir wie folgt beholfen: Im Verzeichnis /etc/ifplugd/action.d gibt es eine Shellskript-Datei namens ifupdown. Die hab ich umbenannt nach ifupdown.bak (da steht zwar nicht viel drin, aber könnte man ja nochmal brauchen). Danach habe ich im Verzeichnis /etc/wpa_supplicant/ nach der Datei ifupdown.sh Ausschau gehalten. Diese hab ich nach /etc/ifplugd/action.d kopiert und nach ifupdown umbenannt. Die bisherige ifupdown wird dadurch durch eine neue Version ersetzt. Diese versetzt den Raspberry in die Lage, sich in das vorhandene WLAN-Netzwerk wieder „einzubuchen“, wenn es denn mal weg war. Nun wird der RasPi abschließend mit sudo reboot neu gestartet. Wenn man alles richtig gemacht hat, ist zunächst alles unverändert: WLAN startet, die entsprechende LED blinkt. Nun kann man testen, ob der gewünschte Reconnect funktioniert: Einfach das WLAN abschalten oder den Stecker am Router ziehen, wie auch immer. Jetzt sieht man, dass die LED des WLAN-Moduls in loser Folge kurz aufblinkt und nach „seinem“ Funknetz sucht (bisher ging die LED aus und der RasPi war offline). Sobald der WLAN-Hotspot wieder da ist, verbindet sich der Raspberry Pi wieder binnen wenigen Sekunden. Bei meinen Tests hatte ich vor dem Ausschalten des WLANs eine SSH-Session offen. Nachdem das Netz wenige Minuten weg und dann wieder da war, war die SSH-Verbindung immer noch bzw. wieder unverändert vorhanden – ls -l flog über den Bildschirm, als wenn nichts gewesen wäre.
Einen Haken hat die ganze Sache jedoch: Sobald man den Raspberry auf diese Art umkonfiguriert hat, funktioniert die LAN-Buchse nicht mehr. Also WLAN off und dann Netzwerk-Stecker in die Ethernetbuchse geht nicht. Aber hierfür haben wir ja die ifupdown.bak gesichert. Wenn man also wieder mal ein Netz per Leitung braucht: Einfach die Datei nach ifupdown umkopieren, und schon ist wieder alles beim Alten.