Seite 1 von 1

Python Programm aus Python Skript als neuen Prozess starten

Verfasst: Donnerstag 26. Juli 2012, 11:36
von Kreavis
Hallo liebe Python Gemeinde,

ich habe für meine Zwecke einen kleinen Watchdog geschrieben. Dieser läuft in einer Endlosschleife und prüft regelmäßig ob ein Logfile noch beschrieben wird oder nicht.

Falls die Logdatei älter als ein definiertes Intervall ist, so wird die zugehörige ProzessID gesucht um das Programm zu killen und erneut zu starten. Die ProzessID existiert noch, da der Server manchmal klemmt und stehen bleibt.

Die ProzessID ermittle ich mit einem Linux Befehl:

Code: Alles auswählen

command = "ps -aef | grep /../../server.py |grep -v grep |awk '{print $2}' | xargs"
p = sub.Popen([command], shell=True, stdout=sub.PIPE,stderr=sub.PIPE)
pid = p.communicate()
Anschließend wird der Server mit os.kill gestoppt.

Bis hierher ist alles gut, aber:

Jetzt soll der Server aus diesem watchdog Skript heraus neu gestartet werden. Ich bekomme den Server aber nicht gestartet, ohne dass die Ausgaben des Servers dann in meinem Watchdog erscheinen. Welches Modul wird benötigt um das zu bewerkstelligen?

Bin für Hinweise dankbar.

Grüße Kreavis

Re: Python Programm aus Python Skript als neuen Prozess star

Verfasst: Donnerstag 26. Juli 2012, 12:50
von deets
Natuerlich auch subprocess. Du musst wahlweise die Ausgaben umleiten in eigene Dateien, nach /dev/null, oder es gleich richtig machen + das daemonize-Paket verwenden, um deinen Server proper zu daemonisieren und damit auch die stdin/stdout/strerr-Stroeme korrekt zu behandeln.

Re: Python Programm aus Python Skript als neuen Prozess star

Verfasst: Donnerstag 26. Juli 2012, 13:01
von lunar
@Kreavis: Verwende das "psutil"-Modul, um den Prozess zu suchen, oder zumindest "pgrep -f server.py". Dieses Shell-Kommando ist ja fürchterlich…

Re: Python Programm aus Python Skript als neuen Prozess star

Verfasst: Donnerstag 26. Juli 2012, 13:07
von Kreavis
deets hat geschrieben:Natuerlich auch subprocess. Du musst wahlweise die Ausgaben umleiten in eigene Dateien, nach /dev/null, oder es gleich richtig machen + das daemonize-Paket verwenden, um deinen Server proper zu daemonisieren und damit auch die stdin/stdout/strerr-Stroeme korrekt zu behandeln.

Ok, dann versuche ich es mal damit. Muss noch testen wie ich die Umleitungen subprocess beibringe. Vielen Dank für den Hinweis, dann weis ich schonmal wo ich suchen muss.

Re: Python Programm aus Python Skript als neuen Prozess star

Verfasst: Donnerstag 26. Juli 2012, 13:22
von Kreavis
lunar hat geschrieben:@Kreavis: Verwende das "psutil"-Modul, um den Prozess zu suchen, oder zumindest "pgrep -f server.py". Dieses Shell-Kommando ist ja fürchterlich…
Oh, das ist wunderbar. Danke für den Hinweis. Den Befehl kannte ich nicht.
Es gibt sogar ne Wikiseite, da steht genau der Befehl und mein alter Befehl...
http://de.wikipedia.org/wiki/Pgrep

Re: Python Programm aus Python Skript als neuen Prozess star

Verfasst: Donnerstag 26. Juli 2012, 13:49
von deets
Wie gesagt, wenn du daemonize in deinem server-prozess verwendest, dann macht das das schon fuer dich.