Python Script überwachen ob es noch läuft

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

Hallo, nach langer Zeit muss ich mich mal wieder melden.
Ich möchte auf einen Ubuntu Server ein Python-Script starten, was so lange laufen soll bis eine Taste betätigt wurde.
Mir geht es nicht um den Inhalt sondern darum, ob man überwachen kann ob dieses Script noch läuft.

Eine Möglichkeit wäre wenn das Programm gestartet wird, es in eine Datei schreibt und wenn es regulär beendet wird, wird der Inhalt der Datei gelöscht.
Ein zweites Script überwacht im gewissen Zeitabstand ob die Datei leer ist. Wenn ja wird das Script neu gestartet.

Oder kann man das auch irgendwie mit System Units (.timer oder .sytem) regeln?
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Kombination "Server" und "warten bis eine Taste betätigt wird" passt nicht so ganz zusammen.
Ja, der übliche Weg wäre, eine systemd-Unit zu schreiben, und auch das Starten und Beenden darüber zu regeln.
Benutzeravatar
noisefloor
User
Beiträge: 4175
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Ein zweites Script überwacht im gewissen Zeitabstand ob die Datei leer ist. Wenn ja wird das Script neu gestartet.
Das Konzept funktioniert doch nicht. Wie stellst du denn sicher, dass das 2. Skript läuft?

Stand der Dinge für so Dinge ist eine systemd Service Unit.

Gruß, noisefloor
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich starte ja ein Systemd Service der dann das Script aufruft. Nur wenn das Script - warum auch immer - dann abbricht, dann nützt mir die System Unit auch nichts. Ich könnte höchstens eine Timer-Unit verwenden.
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

Ja doch, der systemd-Service überwacht doch, ob der Prozess noch läuft und startet ihn gegebenenfalls neu.
Benutzeravatar
noisefloor
User
Beiträge: 4175
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

dann abbricht, dann nützt mir die System Unit auch nichts.
Natürlich nütze die Service Unit was. Über die Restart-Direktive kannst du doch einstellen, wann und wie ein gecrashtes Skript neu gestartet werden soll. Außerdem gibt es ergänzend dazu noch diverse Direktiven wie RestartSec, mit denen du das Verhalten noch detaillierter kontrollieren kannst.

Gruß, noisefloor
Benutzeravatar
DeaD_EyE
User
Beiträge: 1224
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Für Server gibt es Monitoring-Tools, die einem z.B. anzeigen, welche Systemdienste nicht laufen oder eine E-Mail versenden, wenn ein Systemdienst ausgefallen ist.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich habe jetzt in die Unit "Restart" eingefügt. Und es macht was es soll.
Wenn das Script regulär beendet wird, dann startet es nicht mehr neu. Nur wenn es im Script Fehler gibt und abbricht, oder durch sonst welch Abbrüche. Zur Vervollständigung zeige ich mal den Code der Unit.

Code: Alles auswählen

[Unit]
Description=test

[Service]
Restart=on-failure
ExecStart=/home/meinScript.py

[Install]
WantedBy=multi-user.target
Antworten