as-n00
Goto Top

Batch Skripte bleiben hängen

Hallo,

ich habe hier einen Windows Server 2019 auf dem einige Batch Skripte als Admin laufen.
Diese Skripte starten andere Programme oder kopieren, oder löschen.
Also eine Vielzahl von unterschiedlichen Aufgaben.
Das Ganze wird über die Aufgabenverwaltung gestartet.

Seit einiger Zeit bleiben aber einige oder teilweise auch alle Skripte einfach hängen.
Ich sehe das cmd Fenster und es geht nicht weiter.
Klicke ich hinein, läuft das Skript weiter, ansonsten steht es wohl ewig und drei Tage.

Das seltsame ist, dass das Hängen an unterschiedlichsten Punkten stattfindet.
Ich hatte schon die Vermutung, dass die Batch auf das Beenden eines anderen Skriptes wartet.
Aber auch Skripte, die nie warten müssen, bleiben ab und zu einfach hängen.

Ich habe keine Ahnung wo ich da anfangen kann, den Fehler zu suchen und wäre über etwas Hilfe sehr dankbar.
Gerne kann ich weitere Infos liefern.

Ciao
AS-N

Content-Key: 590100

Url: https://administrator.de/contentid/590100

Printed on: April 25, 2024 at 14:04 o'clock

Member: Doskias
Doskias Jul 23, 2020 at 11:08:00 (UTC)
Goto Top
Hallo,

Es wäre hilfreich, wenn du vielleicht mal ein Skript hier postest und ggf. erklärst was das Skript machen soll, wie es gestartet wird und an welcher Stelle es sich aufhängt. Da du schreibst, dass sie sich an unterschiedlichen Punkten aufhängen, hast du ja offenbar schon den Punkt im Skript gefunden wo es nicht weiter geht.
Member: Xerebus
Xerebus Jul 23, 2020 at 11:08:22 (UTC)
Goto Top
Hallo AS-N00

So wird die keiner weiterhelfen können.
Wie ist das Aufgabenplaner eingestellt. Laufen Die Scripte beim manuellen staten durch.
Leite alles mal in ein Logfile um ....
Member: emeriks
emeriks Jul 23, 2020 updated at 11:34:55 (UTC)
Goto Top
Hi,
ich schätze mal, die Ursache bist Du selbst. face-wink

Zitat von @AS-N00:
Ich sehe das cmd Fenster und es geht nicht weiter.
D.h. die Aufgaben starten die CMD, nur wenn der Benutzer angemeldet ist, also interaktiv.

Nun ist es sicher lästig, wenn man gerade arbeitet und da eine CMD aufpoppt. Was macht man? Man klickt rein. Und damit stoppt die Batch.
Oben links in der Fenstertitelleiste sollte dann stehen: "Auswählen" und danach der Rest des Fenstertitels.
Achte da mal drauf, wenn wieder einmal eine Batch hängt.

E.

2020-07-23 13_34_20-window
Member: AS-N00
AS-N00 Jul 23, 2020 at 19:56:07 (UTC)
Goto Top
Ja, das ganze läuft, nur wenn der Benutzer angemeldet ist.
Ich hatte ganz vergessen, es ist ein Terminal Server, und einer der Benutzer ist extra für die ganzen Skripte zuständig.
Da gibt es aber keinen Menschen der da aus Versehen reinklicken kann.
Hier mal eines der Skripte:

set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
set hour=%time:~-11,2%
set minute=%time:~-8,2%
set secound=%time:~-5,2%
Set backupfile_products=%jahr%_%monat%_%tag%_%hour%_%minute%_%secound%_%products.dta 
Set backupfile_products=%backupfile_products: =0% 
Set backupfile_products=%backupfile_products:dta0 =dta%
Set backupfile_products_processed=%jahr%_%monat%_%tag%_%hour%_%minute%_%secound%_%products_processed.dta 
Set backupfile_products_processed=%backupfile_products_processed: =0% 
Set backupfile_products_processed=%backupfile_products_processed:dta0 =dta%
Set backupfile_customers=%jahr%_%monat%_%tag%_%hour%_%minute%_%secound%_%customers.dta 
Set backupfile_customers=%backupfile_customers: =0% 
Set backupfile_customers=%backupfile_customers:dta0 =dta%
Set backupfile_orders=%jahr%_%monat%_%tag%_%hour%_%minute%_%secound%_%orders.dta 
Set backupfile_orders=%backupfile_orders: =0% 
Set backupfile_orders=%backupfile_orders:dta0 =dta%

set DOW=

for /f %%g in ('wmic path win32_localtime get dayofweek^|findstr /v /r "^$"') do (  
set DOW=%%g)

echo %DOW%

:ampelstart
if exist d:\bw50\ampelloc_1.ini goto run1
goto run

:run1
echo admin_1_lief_noch_habe_beendet_%date%_%time:~0,2%-%time:~3,2%-%time:~6,2% >> d:\bw50\ampelloc_1.ini
goto run

:run
echo admin_1_%date%_%time:~0,2%-%time:~3,2%-%time:~6,2% >> d:\bw50\ampelloc_1.ini
echo admin_1_%date%_%time:~0,2%-%time:~3,2%-%time:~6,2% >> d:\bw50\ampelloclast_1.ini


d:
cd \bw50


d:\bw50\bwwin32.exe /NoLogo /NoStartLogo 806 /M:2 !CW 01 17631 /Close
d:\bw50\bwwin32.exe /NoLogo /NoStartLogo 806 /M:2 !CW 01 17636 /Close
d:\bw50\bwwin32.exe /NoLogo /NoStartLogo 806 /M:2 !CW 01 17635 /Close

del d:\bw50\ampelloc_1.ini
echo admin_1_fertig_%date%_%time:~0,2%-%time:~3,2%-%time:~6,2% >> d:\bw50\ampelloclast_1.ini

:end
::exit

Hängen bleibt es z.Bsp. nach Zeile 25 oder 37, aber teilweise eben auch an anderen Stellen.
Mir kommt es so vor, als wenn das Abarbeiten er Batch allgemein hier irgendwie gestoppt wird, egal was gerade läuft.
Member: Doskias
Doskias Jul 23, 2020 at 20:18:35 (UTC)
Goto Top
Sorry, wenn ich das so schreibe, aber wenn ich schon GOTO lese anstatt einer IF-Anweisung, da stehen mir die Nackenhaare hoch. Aber ich hab bestimmt auch Skripte wo andere so was denken, nur halt nicht mit goto ;) Frage dazu: WWenn du schon in Zeile 28 eine IF-Anweisung hast, wieso legst du nicht gleich den Befehl bzw. die Befehle die dann ausgeführt werden sollen an die Stelle. Dann sparst du dir das ganze Goto und musst im Skript nicht hin und her springen, sondern kansnt es von oben nach unten einfach lesen ;)

Verständnisfrage aber nochmal dazu:

Das Skript wird als geplanter Task im Hintergrund ausgeführt. Ok. Aber: Wieso dann der Echo-Befehl in Zeile 25? Du gibst etwas aus, aber das Ergebnis wird nur angezeigt, nciht gespeichert und spielt (in meinem Verständnis) für den weiteren Verlauf keine Rolle. Die anderen Echo-Befehle leitest du ja in eine Datei um, da verstehe ich es noch.

Zitat von @AS-N00:

Ja, das ganze läuft, nur wenn der Benutzer angemeldet ist.
Ich hatte ganz vergessen, es ist ein Terminal Server, und einer der Benutzer ist extra für die ganzen Skripte zuständig.
Da gibt es aber keinen Menschen der da aus Versehen reinklicken kann.

Ja was denn nun? Wenn das Skript nur läuft, wenn der User angemeldet ist, dann kann auch jemand reinklicken. Wenn du der einzige bist und dich nur für das Skript anmeldest, wieso startest du das Skript dann nicht per Hand?

Wenn das Skript nur läuft wenn jemand angemeldet ist, was macht das Skript, wenn du es händisch startest? Was passiert, wenn du das Skript als Admin oder System ausführst. Sehe da jetzt keine serverübergreifenden Befehle und wenn alles lokal ist, wieso dann unter einem speziellen User?

Ich persönlich würde das ganze auf PowerShell portieren. Die Ermittlung des Wochentages ist dadurch zum Beispiel um einiges einfacher, aber das ist meine persönliche Meinung ;)
Member: AlbertMinrich
AlbertMinrich Jul 24, 2020 at 06:20:43 (UTC)
Goto Top
Zitat von @emeriks:
Nun ist es sicher lästig, wenn man gerade arbeitet und da eine CMD aufpoppt. Was macht man? Man klickt rein. Und damit stoppt die Batch.
Oben links in der Fenstertitelleiste sollte dann stehen: "Auswählen" und danach der Rest des Fenstertitels.
Achte da mal drauf, wenn wieder einmal eine Batch hängt.

E.

2020-07-23 13_34_20-window

Oh Mann, ich wundere mich seit langem, wieso gelegentlich meine Scripte und Dauerpings stehen bleiben.
Jetzt weiß ich es. Danke vielmals. Kann man das vielleicht auch abschalten?
Member: TK1987
TK1987 Jul 24, 2020 at 07:29:54 (UTC)
Goto Top
Moin.

Zitat von @AlbertMinrich:
Oh Mann, ich wundere mich seit langem, wieso gelegentlich meine Scripte und Dauerpings stehen bleiben.
Jetzt weiß ich es. Danke vielmals. Kann man das vielleicht auch abschalten?
Abschalten nein. Was man natürlich machen kann, ist die Skripte über die Aufgabenplanung unabhängig von der Benutzeranmeldung ausführen zu lassen.
So ploppt erst gar kein Fenster mehr auf, in das man rein klicken könnte. Den Output in eine Logdatei schreiben lassen, um prüfen zu können, ob alles einwandfrei läuft und gut ist.

Gruß Thomas