trabifant
Lt. Commander
- Registriert
- März 2004
- Beiträge
- 1.322
Hallo zusammen,
ich weiß leider nicht so recht, ob das Thema hier passt, aber ich versuch's mal.
Wir betreiben mittels VM-Ware eine VM, in welcher MS Server 2019 läuft. Hier läuft dauerhaft ein Prozess/Programm. Innerhalb dieses Programms lässt sich einstellen, dass es sich zu einer bestimmten Uhrzeit beendet. Um den Prozess neu zu starten, habe ich ein kleines Powershell-Skript geschrieben, welches über den Task Scheduler aller 2 Minuten ausgeführt wird. Im Skript prüfe ich, ob der Prozess noch ausgeführt wird und falls nicht, dann soll dieser gestartet werden.
Ich habe dieses Setup mehrfach getestet und es funktionierte.
Sobald ich auf dem Server aber nicht mehr per Remote-Desktop verbunden bin, kommt es zu einem Problem. Der Prozess wird noch korrekt beendet (wobei ich mir hier leider auch nicht 100% sicher bin), aber wird nicht mehr sauber gestartet. Die CPU-Last geht auf 99% und ich muss die VM hart neu starten, da nichts mehr reagiert.
Der Task-Scheduler ist so eingestellt, dass das Skript ausgeführt werden soll, wenn der User eingeloggt ist. Wenn die VM läuft, ist doch der User eingeloggt, oder nicht? Sonst würde der zu stoppende/startende Prozess ja nicht ausgeführt werden. Stelle ich den Task so ein, dass er ausgeführt werden soll, egal ob der User eingeloggt ist oder nicht, dann startet das Skript den Prozess dutzendfach als Hintergrundprozess. Das ist schon mal ein Punkt, den ich ebenfalls nicht verstehe, da dann offenbar die Prüfung auf den laufenden Prozess im Powershell-Skript ignoriert wird (sie funktioniert aber, wenn ich den Ablauf manuell durchteste).
Alternativ hatten wir auch eine Batch-Datei im Einsatz, die das Programm neu startet, sobald es geschlossen ist. Hier tritt aber dasselbe Phänomen auf. Beide Lösungen haben die Krux, dass der Freeze von Windows nicht immer auftritt, sondern in unregelmäßigen Abständen.
Ich habe keinerlei Idee, wie oder wo ich dem Problem noch auf den Grund gehen kann. Ich dachte zunächst, dass das Programm selbst nicht sauber gestaltet ist, aber das manuelle Testen des Ablaufs funktioniert fehlerfrei. Nun habe ich den Verdacht, dass es mit dem vermeintlich nicht eingeloggten User zu tun hat.
Das Powershell-Skript und das Setup das Task Schedulers kann ich nachreichen, aber beide enthalten keine Besonderheiten. Das Skript enthält ein get-process und ein start-process und mehr nicht. Der Task ist auf 2 Minuten eingestellt und wird täglich 8 Uhr gestartet.
Ich nehme auch gern anderweitige Lösungsvorschläge an, wie ich das Programm ohne Batch/Powershell/Task Scheduler neu starten kann.
Nachtrag: Das Problem tritt im selben Setup auch in Windows Server 2012 auf. Das dürfte also schon mal keine Rolle spielen.
ich weiß leider nicht so recht, ob das Thema hier passt, aber ich versuch's mal.
Wir betreiben mittels VM-Ware eine VM, in welcher MS Server 2019 läuft. Hier läuft dauerhaft ein Prozess/Programm. Innerhalb dieses Programms lässt sich einstellen, dass es sich zu einer bestimmten Uhrzeit beendet. Um den Prozess neu zu starten, habe ich ein kleines Powershell-Skript geschrieben, welches über den Task Scheduler aller 2 Minuten ausgeführt wird. Im Skript prüfe ich, ob der Prozess noch ausgeführt wird und falls nicht, dann soll dieser gestartet werden.
Ich habe dieses Setup mehrfach getestet und es funktionierte.
Sobald ich auf dem Server aber nicht mehr per Remote-Desktop verbunden bin, kommt es zu einem Problem. Der Prozess wird noch korrekt beendet (wobei ich mir hier leider auch nicht 100% sicher bin), aber wird nicht mehr sauber gestartet. Die CPU-Last geht auf 99% und ich muss die VM hart neu starten, da nichts mehr reagiert.
Der Task-Scheduler ist so eingestellt, dass das Skript ausgeführt werden soll, wenn der User eingeloggt ist. Wenn die VM läuft, ist doch der User eingeloggt, oder nicht? Sonst würde der zu stoppende/startende Prozess ja nicht ausgeführt werden. Stelle ich den Task so ein, dass er ausgeführt werden soll, egal ob der User eingeloggt ist oder nicht, dann startet das Skript den Prozess dutzendfach als Hintergrundprozess. Das ist schon mal ein Punkt, den ich ebenfalls nicht verstehe, da dann offenbar die Prüfung auf den laufenden Prozess im Powershell-Skript ignoriert wird (sie funktioniert aber, wenn ich den Ablauf manuell durchteste).
Alternativ hatten wir auch eine Batch-Datei im Einsatz, die das Programm neu startet, sobald es geschlossen ist. Hier tritt aber dasselbe Phänomen auf. Beide Lösungen haben die Krux, dass der Freeze von Windows nicht immer auftritt, sondern in unregelmäßigen Abständen.
Ich habe keinerlei Idee, wie oder wo ich dem Problem noch auf den Grund gehen kann. Ich dachte zunächst, dass das Programm selbst nicht sauber gestaltet ist, aber das manuelle Testen des Ablaufs funktioniert fehlerfrei. Nun habe ich den Verdacht, dass es mit dem vermeintlich nicht eingeloggten User zu tun hat.
Das Powershell-Skript und das Setup das Task Schedulers kann ich nachreichen, aber beide enthalten keine Besonderheiten. Das Skript enthält ein get-process und ein start-process und mehr nicht. Der Task ist auf 2 Minuten eingestellt und wird täglich 8 Uhr gestartet.
Ich nehme auch gern anderweitige Lösungsvorschläge an, wie ich das Programm ohne Batch/Powershell/Task Scheduler neu starten kann.
Nachtrag: Das Problem tritt im selben Setup auch in Windows Server 2012 auf. Das dürfte also schon mal keine Rolle spielen.