Wer den Raspberry Pi als Server für OSCam oder ähnliche Dienste verwendet ist darauf angewiesen das der RPi immer zuverlässig seinen Dienst tut. Wer möchte schon andauernd zum Pi laufen und den Stecker ziehen? In diesem Artikel möchte ich euch die Möglichkeiten eines automatischen Neustarts über einen Systemwachhund (Watchdog) aufzeigen.
Hinweis:
Die Instabilität eines Systems hat immer eine oder mehrere Ursachen, ich kann nur davon abraten anstelle Fehler zu beheben einfach einen Watchdog zu verwenden um die Probleme zu Umgehen.
Vorbereitung zum Dauerbetrieb
Vor Einrichtung eines Servers und dem 24×7 Dauerbetrieb sollten folgende Dinge beachtet werden.
Häufige Fehler
Eine Häufige Fehlerursache ist die Verwendung eines billigen Netzteils für die Stromversorgung. Der Raspberry Pi benötigt ein Netzteil mit mindestens 700mA. Persönlich habe ich mit folgenden zwei Markennetzteilen sehr gute Erfahrungen gemacht, die auch mit angeschlossenen USB-Geräten einen stabilen Dauerbetrieb des Raspberry Pi ermöglichen
SD-Karte optimieren
Die Speicherkarten sind leider nicht für den Dauerbetrieb ausgelegt und gehen bei massiven Schreib- und Lesezyklen gerne mal kaputt. Daher gilt es diese wo möglich zu reduzieren (gilt auch für Reboots). Eine Möglichkeit ist die Daten auf USB Speicher auszulagern und nur die für den Start notwendigen Daten auf der SD-Karte zu belassen. Alternativ können Schreibintensive Bereiche wie Logs in den RAM ausgelagert werden.
Für einiger dieser Systemverzeichnisse kann es daher sinnvoll sein, diese ins RAM auszulagern.
Um /var/log und /var/run in den Arbeitsspeicher auszulagern, müssen folgende Einträge in der /etc/fstab hinzugefügt werden:
1 2 |
none /var/run tmpfs size=5M,noatime 00 none /var/log tmpfs size=5M,noatime 00 |
Nachteil:
Verlagert man Dateien und Ordner in den RAM sind diese nach einem Neustart nicht mehr verfügbar!
Die Zugriffe können durch deaktivieren des „Swapping“ (Auslagerung von Daten aus dem Arbeitsspeicher) weiter reduziert werden. Das ist allerdings nur sinnvoll wenn man nicht auf das swapping angewiesen ist. Insofern nur OSCam zum Einsatz kommt sollte der RasPi auch ohne swapping zurecht kommen.
1 2 3 |
sudo dphys-swapfile swapoff sudo dphys-swapfile uninstall sudo update-rc.d dphys-swapfile remove |
Kühlung des RasPi
Obwohl der Raspberry Pi bei Auslieferung über keine Kühlkörper verfügt, stellt dies im Normalfall aufgrund der geringen Wärmeentwicklung kein Problem dar. Wird der RPi jedoch übertaktet oder im 24/7 Dauerbetrieb eingesetzt, ist es sinnvoll kleine Kühlkörper aus Aluminium nachzurüsten. Ebenso wenn ein Gehäuse ohne Lüftungsschlitze verwendet oder der RasPi an einem warmen Ort (z.B. hinter dem Fernseher) betrieben wird. Das senken der Temperatur wirkt sich positiv auf die Lebensdauer aus.
Hardware System Watchdog
Der BCM2708-Chip, welcher auf dem RasPi verbaut ist, verfügt standardmäßig bereits über einen Hardware gesteuerten Watchdog. Dieser startet im Fehlerfall das System neu. Um diesen zu verwenden wird ein Kernelmodul und ein Dienst benötigt.
Der Dienst sendet in regelmäßigen Abständen „Lebenszeichen“ an den Hardware Watchdog, empfängt dieser kein Lebenszeichen mehr vom Dienst nimmt er an dass das Betriebssystem nicht mehr sauber läuft und startet den RasPi neu.
Um den Dienst und das Kernelmodul (Treiber) für den Watchdog zu aktivieren:
1 2 3 |
sudo modprobe bcm2708_wdog echo "bcm2708_wdog" | sudo tee -a /etc/modules sudo apt-get install watchdog |
Dann muss noch die Konfigurationsdatei des Watchdog Dienst angepasst werden, um das Gerätedatei des Hardware Wachhunds und die Bedingungen für einen Reset einzustellen
1 |
sudo nano /etc/watchdog.conf |
In der Konfigurationsdatei müssen die folgenden Zeilen aus kommentiert werden (Raute am Anfang entfernen):
1 2 |
watchdog-device = /dev/watchdog max-load-1 = 24 |
Zum aktivieren der Konfiguration ist ein Neustart des Dienstes notwendig
1 |
sudo /etc/init.d/watchdog restart |
Andere Variante für die Überwachung durch den Watchdog Daemon findet ihr in der manpage.
OSCam Dienst neu starten
Das Problem des Hardware Watchdog ist das dieser nicht auf ein abgestürztes OSCam reagieren kann. Daher ist es sinnvoll ein zusätzliches Script, welches den OSCam Dienst prüft, einzurichten. Das Skript prüft auf eine existierende PID File, ist keine vorhanden wird oscam gestartet. Das PID File liegt im Standard in /tmp/oscam.pid für einen anderen Speicherort kann in der oscam.conf folgendes angepasst oder eingetragen werden:
Beispiel:
pidfile = /var/run/oscam.pid
Erstellt eine Datei und speichert den Inhalt des scripts unten darin ab, insofern ihr nicht meine Anleitung verwendet habt müssen die Pfade angepasst werden.
1 |
sudo nano /usr/local/bin/oscamchk |
Die Datei muss nach dem speichern mit nano noch ausführbar gemacht werden
1 |
sudo chmod +x /usr/local/bin/oscamchk |
Als letztes benötigen wir noch einen cron job bzw einen cron table Eintrag welcher das Prüfscript alle paar Minuten ausführt, hierzu starten wir croncrontab
1 |
sudo crontab -e |
Und fügen folgende Zeile am Ende ein (*/5 = alle 5 Minuten)
1 |
*/5 * * * * /usr/local/bin/oscamchk >/dev/null 2>&1 |
Script
1 2 3 4 5 6 7 8 9 |
PIDFILE=/var/run/oscam.pid if (kill -0 `cat $PIDFILE`) then echo "it's alive!" >; /dev/null else rm $PIDFILE /usr/local/bin/oscam start > /dev/null echo "OSCAM restarted at `date`" >> /var/log/oscam-crash.log fi |
Viel Spass!