WaitForProcessEnding arbeitet nicht (mehr) wie vorgesehen

Antworten
Benutzeravatar
jub
Beiträge: 58
Registriert: 25 Nov 2010, 12:40

WaitForProcessEnding arbeitet nicht (mehr) wie vorgesehen

Beitrag von jub »

Hallo zusammen,

bei der Aktualisierung eines Paketes bin ich auf ein Problem mit winbatch /WaitForProcessEnding bei der derzeit aktuellen Version von opsi-script (4.12.6.1) gestossen.
Resultierend daraus ist sowohl das neue Paket, als auch alle bisherigen mit den betroffenen Versionen von opsi-script kaputt.

Zur Veranschaulichung des Problems ein kurzes Beispiel-Skript:

Code: Alles auswählen

[actions]
setLogLevel = 9

defVar $TestPrg$  = "win32calc.exe"
defVar $exitCode$

winbatch_Start_TestPrg  /WaitForProcessEnding  $TestPrg$ /TimeOutSeconds 20
; set $exitCode$ = processCall('powershell -command "sleep -Seconds 3; ' + $TestPrg$ + '; sleep -Seconds 5"')  /WaitForProcessEnding  $TestPrg$ /TimeOutSeconds 20

if processIsRunning($TestPrg$)
	message "TEST FAILED: Killing process: " +  $TestPrg$
	killtask $TestPrg$
else
	message "TEST OK: " +  $TestPrg$ + " ended in winbatch"
endif

[winbatch_Start_TestPrg]
powershell -command "sleep -Seconds 3; $TestPrg$; sleep -Seconds 5"
Was sollte passieren?
  • winbatch startet die PowerShell
  • diese wartet 3 Sekunden und startet dann $TestPrg$ (hier win32calc.exe)
  • nach weiteren 5 Sekunden beendet sich die PowerShell, $TestPrg$ laeuft weiter
  • winbatch sollte auf die Beendigung von $TestPrg$ warten oder spaetestens nach dem Timeout fortfahren
  • wird $TestPrg$ vorher beendet, soll winbatch sofort fortfahren
Im Beispiel ist auch alternativ der Aufruf von processCall hinterlegt. Das fehlerhafte Verhalten tritt auch hier auf.

Was ist passiert?

Egal ob $TestPrg$ vorher beendet wird oder nicht, winbatch und processCall warten immer bis zum Timeout. Ein vorzeitiger Abbruch findet nicht statt.
Ist kein TimeOut definiert, warten die Funktionen ewig.

Auszug Log:

Code: Alles auswählen

[6] [2022-10-20 20:52:49.813] []   Call "powershell -command "sleep -Seconds 3; win32calc.exe; sleep -Seconds 5""
[6] [2022-10-20 20:52:49.819] []      Timeout 20 seconds
[6] [2022-10-20 20:52:49.824] []      Waiting until process "win32calc.exe" started and has ended
[6] [2022-10-20 20:52:49.831] []   Start process as invoker: JUB
[6] [2022-10-20 20:52:49.852] []   Started process "powershell" with Opt: -command\r\n"sleep\r\n-Seconds\r\n3;\r\nwin32calc.exe;\r\nsleep\r\n-Seconds\r\n5"
[8] [2022-10-20 20:52:50.874] []   Waiting for ending at 10/20/2022 20:52:50 exitcode is: 259 output bytes read: 0
[8] [2022-10-20 20:52:51.874] []   Waiting for ending at 10/20/2022 20:52:51 exitcode is: 259 output bytes read: 0
[8] [2022-10-20 20:52:52.874] []   Waiting for ending at 10/20/2022 20:52:52 exitcode is: 259 output bytes read: 0
[8] [2022-10-20 20:52:53.880] []   Waiting for ending at 10/20/2022 20:52:53 exitcode is: 259 output bytes read: 0
[8] [2022-10-20 20:52:54.882] []   Waiting for ending at 10/20/2022 20:52:54 exitcode is: 259 output bytes read: 0
[8] [2022-10-20 20:52:55.877] []   Waiting for ending at 10/20/2022 20:52:55 exitcode is: 259 output bytes read: 0
[8] [2022-10-20 20:52:56.877] []   Waiting for ending at 10/20/2022 20:52:56 exitcode is: 259 output bytes read: 0
[8] [2022-10-20 20:52:57.880] []   Waiting for ending at 10/20/2022 20:52:57 exitcode is: 259 output bytes read: 0
[8] [2022-10-20 20:52:58.873] []   Waiting for ending at 10/20/2022 20:52:58 exitcode is: 259 output bytes read: 0
[8] [2022-10-20 20:52:59.881] []   Waiting for ending at 10/20/2022 20:52:59 exitcode is: 0 output bytes read: 0
[8] [2022-10-20 20:53:00.884] []   Waiting for ending at 10/20/2022 20:53:00 exitcode is: 0 output bytes read: 0
[8] [2022-10-20 20:53:01.884] []   Waiting for ending at 10/20/2022 20:53:01 exitcode is: 0 output bytes read: 0
[8] [2022-10-20 20:53:02.878] []   Waiting for ending at 10/20/2022 20:53:02 exitcode is: 0 output bytes read: 0
[8] [2022-10-20 20:53:03.876] []   Waiting for ending at 10/20/2022 20:53:03 exitcode is: 0 output bytes read: 0
[8] [2022-10-20 20:53:04.872] []   Waiting for ending at 10/20/2022 20:53:04 exitcode is: 0 output bytes read: 0
[8] [2022-10-20 20:53:05.874] []   Waiting for ending at 10/20/2022 20:53:05 exitcode is: 0 output bytes read: 0
[8] [2022-10-20 20:53:06.876] []   Waiting for ending at 10/20/2022 20:53:06 exitcode is: 0 output bytes read: 0
[8] [2022-10-20 20:53:07.883] []   Waiting for ending at 10/20/2022 20:53:07 exitcode is: 0 output bytes read: 0
[8] [2022-10-20 20:53:08.882] []   Waiting for ending at 10/20/2022 20:53:08 exitcode is: 0 output bytes read: 0
[6] [2022-10-20 20:53:09.869] []   Waiting for "win32calc.exe" stopped - time out 20 sec
[6] [2022-10-20 20:53:09.886] []   ExitCode 0    Executed process "powershell -command "sleep -Seconds 3; win32calc.exe; sleep -Seconds 5""
Der Wechsel vom exitcode 259 zum exitcode 0 signalisiert die Beendigung der PowerShell.
win32calc.exe wurde vor Ablauf der Zeit beendet. Das hatte jedoch keinen Einfluss auf winbatch. Analog gilt das auch fuer processCall.

Mit welchen Schritten kann das Problem nachgestellt werden?

Der obige Code kann direkt in opsi-script ausgefuehrt werden. ("Execute viewlist as script" oder Script laden)

Bei welche Versionen der beteiligten Komponenten tritt das Problem auf?

Bemerkt wurde das Problem erstmalig mit opsi-script v4.12.6.1-3.
Zum Gegentest habe ich nochaml opsi-script_4.12.4.30-2.opsi aus dem Archiv geholt. Hier funktioniert alles wie vorgesehen.

Da das Problem bei opsi-script liegt, sind nicht nur neue Pakete von dem Fehler betroffen, sondern auch bisher funktionierende.
(Im aktuell betroffenen Paket muss ich auf /TimeOutSeconds verzichten, da die erwartete Laufzeit schwer abzuschaetzen ist.)


Viele Gruesse,
Jens
Benutzeravatar
j.werner
uib-Team
Beiträge: 64
Registriert: 08 Okt 2019, 13:32

Re: WaitForProcessEnding arbeitet nicht (mehr) wie vorgesehen

Beitrag von j.werner »

Hallo Jens,
vielen Dank für die ausführliche Berschreibung des Problems.

Ist in opsi-script 4.12.6.2-3 gefixt. Zu finden in experimental https://download.uib.de/4.2/experimenta ... localboot/

Viele Grüße
Jan
Benutzeravatar
jub
Beiträge: 58
Registriert: 25 Nov 2010, 12:40

Re: WaitForProcessEnding arbeitet nicht (mehr) wie vorgesehen

Beitrag von jub »

Hallo Jan,

vielen Dank!
Ich kann bestaetigen, dass das Problem damit fuer winbatch und processCall behoben ist.

Gibt es schon eine Vorstellung, wann opsi-script 4.12.6.2-3 nach stable wandert?
Von dem Problem ist naemlich u.a. das O4I-Paket fuer Anaconda3 und Anaconda2 betroffen. (Ich kann die Experimental-Version zwar bei uns ausrollen, aber nicht bei allen O4I-Einrichtungen.)

Viele Gruesse,
Jens
Benutzeravatar
jub
Beiträge: 58
Registriert: 25 Nov 2010, 12:40

Re: WaitForProcessEnding arbeitet nicht (mehr) wie vorgesehen

Beitrag von jub »

jub hat geschrieben: 21 Okt 2022, 12:16 Gibt es schon eine Vorstellung, wann opsi-script 4.12.6.2-3 nach stable wandert?
Danke, das opsi-script-Paket ist inzwischen angekommen.
Die Installation des besagten Anaconda3-Paketes funktioniert damit auch wieder.

Viele Gruesse,
Jens
Antworten