Ein Blog über Code, Hardware und Co

Technik und Hardware

Server automatisch neustarten, wenn keine Internetverbindung mehr vorhanden ist

Zuletzt aktualisiert am 14. Januar 2023.

Oder: Wie du ein Linux-System automatisch rebootest, wenn “ping” fehlschlägt

Server stellen per Definition einen Dienst zur Verfügung. In der Regel tun sie das über das Internet oder zumindest über ein Netzwerk. Aber was ist, wenn das Netzwerk instabil ist und manchmal abreißt? Ein Server ohne Internetverbindung ist ein Problem. Unter Linux lässt sich der Server bei fehlender Internetverbindung leicht rebooten.

Die Funktionsweise der Lösung in Kürze

Wir machen uns ein kleines Programm zu Nutze, das auf jedem Linux-System zur Verfügung steht: “ping”.

Was ist "ping"?
Ping ist ein Befehlszeilendienstprogramm, das ICMP ECHO_REQUEST-Pakete an Netzwerkhosts sendet. Ping kann verwendet werden, um die Umlaufzeit für Nachrichten zu messen, die vom lokalen Host an einen entfernten Host und umgekehrt gesendet werden.

Ping wird auf viele verschiedene Arten verwendet, z. B. zum Testen der Konnektivität, Messen der Bandbreite, Beheben von Routing-Problemen und Auffinden der Quelle von Netzwerkproblemen.

Was wir nun machen werden: Wir werden ein Shellscript schreiben, das versucht einen hinterlegten Host anzupingen. Wenn das funktioniert ist alles ok und es besteht eine funktionierende Internetverbindung.
Schlägt der “ping”-Befehl im Skript aber fehl, so wird an das System der Befehl zum rebooten gegeben.

Zur Sicherheit gibt das System den Reboot-Befehl erst, wenn 3 Ping-Befehle hintereinander fehlgeschlagen sind.

Das Skript tragen wir zu guter Letzt in die sog. “crontab” ein, damit es in regelmäßigen Zeitabständen automatisch ausgeführt wird.

Was ist "crontab"?
Cron ist ein zeitbasierter Job-Scheduler in Unix-ähnlichen Computerbetriebssystemen. Es wird verwendet, um Befehle oder Skripte zu bestimmten Zeiten oder Daten auszuführen. Cron-Jobs werden normalerweise jede Minute, Stunde, Tag, Woche und Monat vom Cron-Daemon ausgeführt.
Der Name crontab wurde von dem Wort „cron table“ abgeleitet.

Lösung: Ein Shell-Skript erstellen und automatisch ausführen

Gesamtzeit: 10 Minuten

1) Datei auf der Konsole erstellen

Zuerst loggen wir uns mittels SSH auf unserem Server ein.
Dann erstellen wir in einem Verzeichnis unserer Wahl (es bietet sich z.B. das Home-Verzeichnis des Nutzers, mit dem wir uns einloggen an).
Dort erstellen wir mit folgendem Befehl unsere Datei:

touch pingreboot.sh

2) Mit Editor öffnen und erstellen

Jetzt öffnen wir die soeben erstellte Datei und fügen machen daraus unser Shellskript*, indem wir den folgenden Code einfügen:

#!/bin/bash

count=$(ping -c 3 8.8.8.8 | grep icmp* | wc -l)

if [ $count -eq 0 ]; then
/sbin/shutdown -r 0


fi

*Ein Shell-Skript ist ein kleines Computerprogramm. Es kann verwendet werden, um Aufgaben zu automatisieren und Arbeitsabläufe zu vereinfachen.
Shell-Skripte werden häufig für die Systemverwaltung, Programmierung und Skripterstellung verwendet.
Shell-Skripte werden normalerweise von der Shell interpretiert, was bedeutet, dass sie auf jedem Betriebssystem ausgeführt werden können, auf dem eine kompatible Shell installiert ist.

3) Skript ausführbar machen

Damit unser erstelltes Skript automatisch mittels Crontab ausgeführt werden kann, müssen wir es ausführbar machen:

chmod +x pingreboot.sh

4) Automatisch mittels Crontab ausführen

Jetzt erstellen wir einen Eintrag, damit unser Skript mittels Crontab in festen Zeitabständen aufgerufen und ausgeführt wird.
Dafür öffnen wir mit folgendem Befehl die crontab:

sudo crontab -e

Jetzt ergänzen wir für eine Ausführung alle 10 Minuten den folgenden Eintrag:

*/10 * * * * /pfad/zu/pingreboot.sh

Wichtig ist, dass du den Pfad entsprechend daran anpasst, wo dein Skript liegt.
Tipp: Den Pfad, in dem dein Skript liegt, kannst du dir einfach anzeigen lassen, indem du auf der Konsole “pwd” eingibst.

Schreibe eine Antwort