Task Scheduler - Powershell-Skript - Freeze (Windows Server 2019)

trabifant

Lt. Commander
Registriert
März 2004
Beiträge
1.320
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.
 
Wir betreiben mittels VM-Ware eine VM
VMware ist eine Firma, kein Produkt und man schreibt sie nicht mit Bindestrich. Das aber nur an Rande.

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?
Nicht unbedingt, der User (welcher User denn?) ist dann eingeloggt wenn er eingeloggt ist. Das lässt sich über einen Autologin zwar automatisch machen wenn man das braucht, von selbst passiert das aber nicht.
Beim Anlegen des Tasks gibst du an unter welchem Benutzerkontext es gestartet werden soll und kannst auch festlegen ob es unabhängig von der Anmeldung sein soll. Das geht aber auch nur wenn das Programm damit grundsätzlich klar kommt.

Warum beendet sich das Programm denn überhaupt bzw. ist es so eingestellt? Um welches Programm handelt es sich überhaupt?
 
Das Programm ist quasi der Taskplaner eines Transportmanagement-Systems. Dort kann ich einen Task anlegen, der das Beenden des Programms auslöst. Das ist leider notwendig, da der RAM-Verbrauch des Prozesses stetig ansteigt.

Der Benutzer ist im Task Scheduler eingetragen. Wenn ich es unabhängig von der Anmeldung einstelle, dann startet das Programm wie gesagt mehrfach als Hintergrundprozess.
 
Schade wenn das Programm so schlecht ist aber oft hat man ja leider keine Wahl.
Mach Autologin an damit die Benutzersitzung immer läuft: https://docs.microsoft.com/en-us/sysinternals/downloads/autologon
Wenn du per RDP drauf gehst denk dran nur zu trennen und nicht abzumelden.

Das Script kannst du dann auch als Trigger "Bei Anmeldung des Benutzers" starten. Damit sollte dann alles sauber laufen.
 
  • Gefällt mir
Reaktionen: nubi80 und trabifant
Zurück
Oben