Linux - Prüfen ob ein Script oder Programm aktiv ist
Jeder der selber einen Server (VServer, Root Server o.ä.) hat wird vermutlich schon einmal das Problem gehabt haben, dass der Server vielleicht mal in der Nacht unerwartet neu startete und dadurch verschiedene Dienste nicht wieder automatisch gestartet wurden. Dabei rede ich nicht von Web Diensten, den Datenbanken oder ähnlichem, sondern von Voice Servern, Games Servern oder ähnlichen Diensten auf euren VServern oder Roots. Also Dienste die meist von Hand eingerichtet und aktiviert werden. Ich hatte nun das Problem, dass ich vergessen hatte das ein Kernel Update am Server durchgeführt wird und dadurch waren einige der oben genannten Dienste nicht verfügbar. Also habe ich mir ein kleines Script geschrieben welches einfach per Cronjob ausgeführt wird. Somit bin ich immer auf der sicheren Seite und alle Dienste die aktiv sein sollen sind es auch, egal ob der Server neu startete oder ob der Dienst allgemein abstürzte. Fragen und Anregungen bitte wie immer in die Kommentare und ich werde sobald wie möglich antworten.
Simple Variante: Die erste Zeile im Script gibt die Shell an mit welcher gearbeitet wird. Die Zeile braucht euch im allgemeinen nicht weiter zu interessieren. Der Befehl pgrep sucht nach dem Prozessnamen und gibt zurück ob dieser gefunden wurde. Es folgt eine if Abfrage welche nun auf den jeweiligen Fall reagiert. Sollte der Mumble Server nicht aktiv sein wird er gestartet und vorher wird noch [Offline / Fehler] Mumble (Starte Programm) ausgegeben, wenn er aktiv ist wird auf der Konsole [Online] Mumble ausgegeben.
#!/bin/sh
if [ $(pgrep murmur.x86) ];
then
echo "[Online] Mumble"
else
echo "[Offline / Fehler] Mumble (Starte Programm)"
/pfad/zum/mumble/server/murmur.x86
fi;
Umfangreiche Variante mit Ausgabeumleitung in eine Log Datei und Prüfung ob das Programm gestartet wurde: Als Ergänzung zur oberen Erklärung wird hier am Anfang die Variable Log erstellt und mit dem Pfad und der Datei gefüllt in der die Log Informationen gespeichert werden sollen. Alle Ausgaben werden mit einem Datum versehen (date Befehl) und dann in die Log Datei umgeleitet und nicht mehr direkt ausgegeben. Außerdem wird im unteren Teil des Scripts die Prüfung ob der Mumble Server aktiv ist erneut durchgeführt. So kann das Script eine Aussage treffen ob der Server gestartet werden konnte oder ob zum Beispiel die Startdatei des Mumble Servers an sich fehlt.
#!/bin/sh
log=/pfad/zur/log/datei.txt
if [ $(pgrep murmur.x86) ];
then
date >> $log
echo "[Online] Mumble" >> $log
else
date >> $log
echo "[Offline / Fehler] Mumble (Starte Programm)" >> $log
/pfad/zum/mumble/server/murmur.x86
if [ $(pgrep murmur.x86) ];
then
echo "[Online] Mumble (Programm gestartet)" >> $log
else
echo "[Offline / Fehler] Mumble (Programm konnte nicht gestartet werden)" >> $log
fi;
fi;
Bezüglich der Einrichtung als Cronjob werde ich bald noch eine gesonderte News erstellen. Für alle die nicht warten wollen empfehle ich den Wiki Eintrag zum Thema auf Ubuntuusers.de open_in_new.