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"
- 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
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""
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