Wie überwacht und startet man ein Skript automatisch neu?

Veröffentlicht 8. September 2024

Problem: Prozesse am Laufen halten

Prozesse können unerwartet abstürzen oder stoppen, was Dienste unterbrechen und Ausfallzeiten verursachen kann. Das manuelle Neustarten dieser Prozesse ist zeitaufwendig und ineffizient, besonders für wichtige Systeme, die ständig laufen müssen.

Lösung: Bash-Skript zur Prozessüberwachung und zum Neustart

Erstellen eines Bash-Skripts

Ein Bash-Skript kann ein Python-Skript überwachen und neu starten, wenn es nicht mehr läuft. Die Hauptbestandteile dieses Bash-Skripts umfassen:

  • Eine Schleife, die kontinuierlich läuft
  • Einen Befehl, der prüft, ob das Python-Skript läuft
  • Logik, um das Python-Skript zu starten, wenn es nicht läuft

Das Skript überprüft mit dem Befehl pgrep, ob der Python-Prozess läuft. Wird der Prozess nicht gefunden, startet das Skript ihn erneut. Diese Methode ist einfach, um ein Skript am Laufen zu halten.

Tipp: Logging zur Fehlerbehebung

Fügen Sie Ihrem Bash-Skript Logging hinzu, um zu verfolgen, wann das Python-Skript neu gestartet wird. Dies kann bei der Fehlerbehebung und der Überwachung der Häufigkeit von Neustarts helfen. Sie können dies tun, indem Sie eine Zeile hinzufügen, die in eine Log-Datei schreibt:

echo "$(date): Neustart von $SCRIPT_NAME" >> /pfad/zur/restart.log

Platzieren Sie diese Zeile in Ihrem Bash-Skript direkt vor dem Neustart des Python-Skripts.

Implementierung des Bash-Skripts

So schreiben Sie das Bash-Skript:

  1. Öffnen Sie einen Texteditor und erstellen Sie eine neue Datei namens monitor_script.sh.

  2. Fügen Sie diesen Inhalt zur Datei hinzu:

#!/bin/bash

SCRIPT_NAME="checkqueue.py"
SCRIPT_PATH="/pfad/zu/checkqueue.py"

while true; do
    if ! pgrep -f "$SCRIPT_NAME" > /dev/null; then
        echo "Starte $SCRIPT_NAME"
        python3 "$SCRIPT_PATH" &
    fi
    sleep 60
done
  1. Speichern Sie die Datei und machen Sie sie mit dem Befehl ausführbar: chmod +x monitor_script.sh

Lassen Sie uns jeden Teil des Skripts erklären:

  • #!/bin/bash teilt dem System mit, dass es Bash verwenden soll, um dieses Skript auszuführen.
  • Die Variablen SCRIPT_NAME und SCRIPT_PATH speichern den Namen und den vollständigen Pfad des Python-Skripts.
  • Die while true-Schleife lässt das Skript kontinuierlich laufen.
  • pgrep -f "$SCRIPT_NAME" prüft, ob ein Prozess mit dem Skriptnamen läuft.
  • Wird der Prozess nicht gefunden, startet das Skript ihn mit python3 "$SCRIPT_PATH" &.
  • Der Befehl sleep 60 lässt das Skript 60 Sekunden warten, bevor es erneut prüft.

Um dieses Skript zu verwenden, ersetzen Sie /pfad/zu/checkqueue.py durch den tatsächlichen Pfad zu Ihrem Python-Skript. Sie können dann das Bash-Skript im Hintergrund ausführen oder es zu den Startprozessen Ihres Systems hinzufügen, um Ihr Python-Skript dauerhaft am Laufen zu halten.