Zum Inhalt springen

Heute einmal wieder ein kleines Skript (Test Teamspeak)

  • von

Von Zeit zu Zeit hat sich der Teamspeak-Server auf meiner virtuellen Maschine bei Hetzner kommentarlos beendet.

Daher prüft folgendes kleines Skript ob der Server noch läuft.
Tut er dies nicht mehr wird er (wieder) gestartet.

## !/bin/bash
## test, if not running ->restart
## started by cronjob

export status=ps -fe|grep "[t]s3server"|awk '{print $2}'
if [[ $status != $off ]]; 
    then 
            /usr/bin/echo läuft; 

    else 
            echo läuft nicht;
            /etc/init.d/teamspeak start

und dazu der entsprechende Cron-Eintrag, damit das Skript alle 10 Minuten ausgeführt wird.
*/10 * * * * /bin/bash /home/skripte/test-teamspeak.sh

Erstellt via

crontab -e

eingefügt und gespeichert, voila, fertig ist die Prüfung. Das behandelt soweit zumindest schon einmal das Symptom einigermaßen.

Einige Kommentare zum Skript

Voraussetzung für das Skript ist ein Startskript für den TeamSpeak-Server, z.B. dieses hier, welches an der entsprechenden Stelle im Dateisystem abgelegt wird.

export status=ps -fe|grep „[t]s3server“|awk ‚{print $2}‘

Zuerst wird die Variable status mit der Ausgabe des Befehls ps -fe gefüllt, welche jedoch vorher noch gefiltert wird, sodass zuerst nur Zeilen auftauchen, welche ts3server, den Namen des Teamspeak-Server-Prozesses enthalten.
Die eckige Klammer um den ersten Buchstaben [ ] stellt dabei sicher, dass nur Ausgaben berücksichtigt werden, die mit t beginnen. So schließt man aus, dass sich ps den grep Prozess findet und so falsche Ergebnisse liefert.
Diese Auswahl wird mittels awk auf die zweite Spalte reduziert, die PID (Prozess id).
Läuft der Server sollte der Inhalt der Variable Statzus eine Zahl sein, z.B. 18429.
Die if-Abfrage prüft ob die Variable leer ist, ist sie dies nicht, läuft der Server, ist sie leer wird der Server neu gestartet.
Man könnte hier die Abfrage natürlich auch umdrehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert