Seite 1 von 1

Script startet Server, jedoch Sperrung der Konsole, ausweg?

Verfasst: Mittwoch 21. Dezember 2005, 11:50
von marcin
Hallo,

hab ein Problem, bei meinem Prog. Erstmal Situation:
Ich muß ein prog schreiben das einen Server ständig neu startet (mit veränderter Config) und beendet. An sich kein Problem, jedoch:

Der server, wird mit server.exe gestartet, jedoch ist es so, dass selbst wenn ich unter der Kommandozeile(von WINDOWS!) server.exe ausführe, dann blockiert die exe die Konsole, rufe ich den Befehl bei Python mit os.system("server.exe") auf, dann unterbricht dies die Ausführung des Skripts! Habe mir folgende Gedanken gemacht:
1. Unter Unix wäre mir das nicht passiert, dafür gibts nämlich ein Script "Start/Stop server"
2. Einen Thread schreiben, hier das Ergebnis:

Code: Alles auswählen

class ServerThread(threading.Thread):
	def __init__(self):
		threading.Thread.__init__(self)
		
	def setStartCmd(self, cmd):
		self.cmd = cmd
		self.vRet = None
		
	def run(self):
		self.vRet = os.system(self.cmd)
Funktioniert auch, aber ich weiß nicht wie ich den Thread (und damit auch den Server stoppen könnte. In der Kommandozeile tippe ich dazu CTRL + C ein.
3. Eigentlich wollte ich Threading vermeiden, aber os.system("cmd /c server.exe") ruft genau das gleiche Problem hervor.
4. Im Grunde ist der server ein service und sollte auch so unter Win gestartet werden, aber als normaler Benutzer fehlen mir unter NT die Rechte, also muß ich mit der server.exe arbeiten.

Falls jemand aus meiner Beschreibung schlau geworden ist und eine Lösung hat, dann wäre ich echt dankbar.

Edit (Leonidas): Code in Python-Tags gesetzt.

Verfasst: Mittwoch 21. Dezember 2005, 12:42
von mr.hide
Auf anhieb fällt mir auch nur eine Dreckige Lösung ein.

Der Thread hat normalerweise eine eigen PID, damit kannst du den killen...


Aber ich wäre auch an einer sauberen Lösung interessiert ..

Grüße
Matthias

Verfasst: Mittwoch 21. Dezember 2005, 12:49
von Gast
Also die Lösung kann ich nicht benutzen, denn der Server muß richtig runterfahren. Hab ein bißchen gestöbert und folgendes gefunden im modul signal kann ich irgendwie ein SIGTERM schicken, jedoch kein Plan wie, hat einer damit Erfahrung und wuesste wie ich das anstellen soll?

Verfasst: Donnerstag 22. Dezember 2005, 00:40
von BlackJack
Das `signal` Modul enthält Funktionen um auf Signale zu reagieren, nicht um sie zu verschicken. Das kann man mit `os.kill()` allerdings nur unter richtigen Betriebssystemen (Mac und Unix) :wink:

Re: Script startet Server, jedoch Sperrung der Konsole, ausw

Verfasst: Donnerstag 22. Dezember 2005, 08:44
von gerold
marcin hat geschrieben: Ich muß ein prog schreiben das einen Server ständig neu startet (mit veränderter Config) und beendet. An sich kein Problem, jedoch:
Hi marcin!

Du könntest aus deinem Programm einen Windows-Dienst machen.

http://agiletesting.blogspot.com/2005/0 ... ndows.html

So ein Dienst kann über die Kommandozeile mit den Befehlen "net start <dienstname>" und "net stop <dienstname>" gestartet und beendet werden.

mfg
Gerold
:-)

Re: Script startet Server, jedoch Sperrung der Konsole, ausw

Verfasst: Freitag 6. Januar 2006, 12:36
von Gast
gerold hat geschrieben: Du könntest aus deinem Programm einen Windows-Dienst machen.
Hi,

sorry die späte Antwort, hatte aber Urlaub....
Danke für den Vorschlag Gerold, aber das ist zu komplex, denn das skript muss von beliebigen leuten gestartet werden können, ohne dass sie an der reg rumspielen und so...

Mittlerweile möchte ich am liebsten dem Thread ein SIGTERM schicken, dass muss doch irgendwie machbar sein, oder?
@BlackJack: Danke für die Aufklärung, gibts aber kein Modul, wo ich dann so ein SIGTERM schicken kann? os.kill() wäre am besten, aber verfluchtes Win rafft das ja wieder nicht....