2009-05-21 11 views
3

Ich habe 2 Server-Programme, die mit der Verwendung von GNU-Bildschirm gestartet werden müssen. Ich möchte diese Server gegen Abstürze mit einem Python-basierten Programm härten, das jede Bildschirmsitzung startet und dann den Serverprozess überwacht. Wenn der Serverprozess abstürzt, brauche ich den Python-Code, um die überflüssige Bildschirmsitzung zu beenden und den Server erneut mit dem Bildschirm zu starten.Multi-Server-Monitor/Auto-Neustart in Python

Ich bin sehr neu zu Python, aber ich nutze diese Gelegenheit, um mich selbst zu unterrichten. Ich bin mir bewusst, dass dies im Bash-Scripting gemacht werden kann. Aber ich möchte auf diesen Code für zukünftige Features aufbauen, also muss es nur Python sein.

Der Pseudo-Code ist wie folgt:

thread-one { 
    While 1: 
    start server 1 using screen 
    wait for server to end 
    end while 
} 

thread-two { 
    While 1: 
    start server 2 using screen 
    wait for server to end 
    end while 
} 
+0

Sind diese tatsächlich Threads? Oder sind sie Kinderprozesse? –

+0

das Python-Skript (ich würde denken) müsste Multithread sein, um den Neustart von zwei separaten Programmen unabhängig zu behandeln. Sie sind also Threads, die Kindprozesse unabhängig starten. – Caedis

Antwort

5

„sein müssen, multi-threaded das Neustarten von zwei getrennten Programmen zu handhaben“

Sie nicht sehen, warum.

import subprocess 

commands = [ ["p1"], ["p2"] ] 
programs = [ subprocess.Popen(c) for c in commands ] 
while True: 
    for i in range(len(programs)): 
     if programs[i].returncode is None: 
      continue # still running 
     else: 
      # restart this one 
      programs[i]= subprocess.Popen(commands[i]) 
     time.sleep(1.0) 
+1

Wow, ich werde die nächste Stunde damit verbringen, diesen Code für jeden Tropfen Information zu analysieren, den ich daraus entnehmen kann. Vielen Dank! – Caedis

3

Sie sollten wirklich nicht Produktions-Software auf einem Bildschirm laufen. Wenn der Server neu gestartet wird, wie starten Sie ihn? Manuell? Auch ich denke, dass Sie versuchen, das Rad neu zu erfinden. Es gibt schon ziemlich gute Werkzeuge, die das tun, was Sie brauchen.

launchtool können Sie führen ein Benutzer bereitgestellte Befehl zur Überwachung seiner Ausführung in vielerlei Hinsicht, wie seiner Umgebung zu steuern, Signale blockiert, dessen Ausgang Protokollierung Ändern Benutzer- und Gruppenberechtigungen, die Begrenzung Ressourcennutzung , es neu starten, wenn es ausfällt, läuft es kontinuierlich, macht es zu einem Daemon und vieles mehr.

.

Monit ist ein kostenloser Open-Source- Dienstprogramm für die Verwaltung und Überwachung, Prozesse, Dateien, Verzeichnisse und Dateisysteme auf einem UNIX-System. Monit führt automatische Wartung und Reparatur und kann sinnvolle kausale Aktionen in Fehlersituationen ausführen.

+0

Obwohl der Server von meinen Kunden verwendet wird, ist er nicht geschäftskritisch, er ist ein Testserver für den nicht geschäftlichen Gebrauch. Die Server-Programme, obwohl sie wichtig sind, um mitzuhalten, werden niemanden töten oder jemandem Geld kosten, wenn sie sterben. Der Hauptzweck dieser Übung ist es, ein nützliches Programm zu erstellen, das ich in der Zukunft erweitern kann, während ich Python lerne. Ich habe herausgefunden, dass ich am besten lerne, wenn ich mich befriedigen muss. Es kann Apps geben, um dies zu tun, aber das verhindert den Zweck. – Caedis