Die bat-Datei verhält sich anders, wenn sie vom Windows-Scheduler ausgeführt wird

2

Ich habe eine .bat-Datei S: \ BACKUP_db \ ​​copytofileserver.bat, die einige Dateien nimmt und sie auf das Netzlaufwerk komprimiert. Der erste Befehl besteht darin, die alte Sicherung unter einem bestimmten Netzwerkpfad zu löschen und die Dateien in den Ordner S: \ BACKUP_db zu packen. Sehen:

echo ================================================== >> log.txt
echo %date%, %time%: Backup started >> log.txt
set dow=%date:~0,3% >> log.txt

echo %time%: deleting existing backup... >> log.txt
del /F /S /Q /A "\\192.168.1.249\homes\backup\%dow%.7z"  >> log.txt
echo %time%: OK >> log.txt

echo %time%: packing and saving new backup... >> log.txt
if exist *.Backup S:\BACKUP_db\7za a -t7z -mx=1 "\\192.168.1.249\homes\backup\%dow%.7z" S:\Backup_db\*.Backup -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3 >> log.txt
echo %time%: OK >> log.txt

echo %time%: deleting local backup files...  >> log.txt
del /F /S /Q /A S:\backup_db\*.Backup  >> log.txt
echo %time%: OK  >> log.txt

echo %date%, %time%: Backup finished >> log.txt

Wenn ich diese .bat-Datei manuell starte, funktioniert sie wie ein Zauber (die Datei ist sehr groß, ca. 50 GB, wenn sie komprimiert ist, ca. 5 GB). löscht Dateien im Netzwerk, bleibt aber während der Ausführung von 7zip immer hängen. Der Windows-Scheduler gibt als letztes Ausführungsergebnis 0x41306 an.

Die Einstellungen der Windows-Scheduler-Task scheinen korrekt zu sein: Nur ausführen, wenn der Benutzer angemeldet ist, "Mit höchsten Berechtigungen ausführen" macht keinen Unterschied usw.

Seltsamerweise hat es früher funktioniert, jetzt bleibt es hängen und ich habe keine Ahnung warum. Manchmal wird eine 16-MB-ZIP-Datei am Netzwerkziel erstellt, manchmal eine 2-GB-Datei, die zufällig zu sein scheint.

zweite Runde: Nun, das ist jetzt passiert. Ich habe die bat-Datei so eingestellt, dass sie zur angegebenen Zeit ausgeführt wird, und habe bei der Ausführung meiner Befehle ein schwarzes Fenster beobachtet. Es stürzte erneut ab, die Datei wurde erstellt: "\ 192.168.1.249 \ homes \ qi \ BackupQIostra \ po .7z", es hat 0,6 GB, es sollen mindestens 5 GB sein. Auch in der bat-Datei habe ich alle lokalen Pfade wie vorgeschlagen durch "% ~ dp0" ersetzt, keine Änderung. Protokolldateiausgabe:

================================================== 
po 04. 08. 2014, 11:00:00,40: Backup started 
11:00:00,44: deleting existing backup... 
Deleted file - \\192.168.1.249\homes\backup\po  .7z
11:00:00,49: OK 
11:00:00,50: packing and saving new backup... 

danach starte ich die .bat Datei per Doppelklick und beobachte was passiert

================================================== 
po 04. 08. 2014, 11:37:37,60: Backup started 
11:37:37,61: deleting existing backup... 
Deleted file - \\192.168.1.249\homes\backup\po  .7z
11:37:37,63: OK 
11:37:37,63: packing and saving new backup... 

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
Scanning

Creating archive \\192.168.1.249\homes\backup\po  .7z

Compressing  20225_20140804030000 - Copy.Backup
Compressing  20225_20140804030000.Backup

Everything is Ok
12:53:59,52: OK 
12:53:59,52: deleting local backup files...  
Deleted file - S:\BACKUP_db\20225_20140804030000 - Copy.Backup
Deleted file - S:\BACKUP_db\20225_20140804030000.Backup
12:54:02,18: OK  
po 04. 08. 2014, 12:54:02,18: Backup finished 
skroslak
quelle
Es macht immer Spaß, einen normalen Stapel im Scheduler zum normalen Laufen zu bringen. "Warum es so komisch ist" :-). Gibt Ihr an, dass es vorher über den Scheduler voll funktionsfähig ist, aber zu verschiedenen Zeiten ausfällt? Was ist, wenn es etwas mit dem Öffnen / Sperren von Dateien zu tun hat? Sie haben das Zippen in Ihrem Protokoll, aber worüber hat sich das Zipprogramm selbst beschwert? Auch (ich vergesse) manchmal das Fehlen eines Ausgabefensters, mit dem ein Programm sprechen kann?
Psycogeek
Nun, 7zip selbst wird seine Ausgabe in die Protokolldatei erst machen, wenn es fertig ist :( Wenn es vom Scheduler ausgeführt wird, sehe ich im Protokoll als letztes die Zeile: "time: packing and saving new backup ..." und Da immer eine Datei im Netzwerkverzeichnis erstellt wird, läuft sie vermutlich einige Zeit und dann passiert etwas Schlimmes und es stürzt ab und das Protokoll bleibt leer.
skroslak
Problembehandlung. Machen Sie es zu etwas Kleinem wie einer Zeile oder ein paar Zeilen, die anders funktionieren
barlop
Die 7zip-Ausführung funktioniert anders, das weiß ich schon. Ich kann nicht tiefer in diese exe-Datei gehen :) Vielleicht werde ich versuchen, das Komprimierungsprogramm insgesamt zu ändern und zu sehen, ob es ein Problem mit 7zip ist.
skroslak
1
Vielleicht können Sie die zip-Aktion nur zu Testzwecken kleiner und schneller machen und sie dann über den Taskplaner-Ausführungszeitplan weiter testen.
Psycogeek

Antworten:

1

Es scheint, als ob die Aufgabe an hstart utility delegiert wurde, um das Problem zu lösen. Es ist eine Art Workaround und ich habe keine Möglichkeit mehr, Feedback von 7zip zu erhalten, aber die bat-Datei funktioniert jetzt einwandfrei und erledigt die Aufgabe.

also habe ich das ersetzt:     Wenn vorhanden * .Backup% ~ dp0 \ 7za a -t7z -mx = 1 "\ 192.168.1.249 \ homes \ qi \ BackupQIostra \% dow% .7z"% ~ dp0 * .Backup -m0 = BCJ2 -m1 = LZMA: d23-m2 = LZMA: d19-m3 = LZMA: d19-mbO: 1-mbOs1: 2-mbOs2: 3 & gt; & gt; log.txt

mit diesem:     wenn vorhanden .Backup "% ~ dp0hstart \ hstart.exe" / NOCONSOLE / RUNAS / NOUAC / SHELL / WAIT / D = "% ~ dp0" / BELOWNORMAL "% ~ dp07za a -t7z -mx = 1" \ 192.168.1.249 \ homes \ qi \ BackupQIostra \% dow% .7z "% ~ dp0 Backup -m0 = BCJ2 -m1 = LZMA: d23 -m2 = LZMA: d19 -m3 = LZMA: d19 -mb0: 1 -mb0s1: 2 -mb0s2: 3 "& gt; & gt; log.txt

ABER:

Als ich jetzt beobachtete, wie es vom Scheduler ausgeführt wurde, bemerkte ich etwas Seltsames. Meine .bat-Datei wird gestartet, hstart führt den 7zip-Befehl extern aus und das schwarze Hauptbefehlsfenster, das auf den Abschluss der hstart / 7zip-Task wartet, verschwindet nach ~ 5 Minuten! Der externe Befehl 7zip wird jedoch weiterhin ausgeführt, ausgeblendet und ordnungsgemäß ausgeführt. Natürlich ist die Protokolldatei nicht vollständig, sie stapelt sich immer noch in der Mitte, da das Hauptfenster abgestürzt ist. Jetzt weiß ich sicher, dass es das Hauptbefehlsfenster ist, das abstürzt.

skroslak
quelle
0

Ich denke, aktuelles Verzeichnis% systemroot% \ System32 beim Start mit Service oder Scheduler. Möglicherweise muss Folgendes hinzugefügt werden:

CD S: \ BACKUP_db \

crazypotato
quelle
Besser noch zu gebrauchen CD "%~dp0, was auch dann funktioniert, wenn Sie die Dateien verschieben. Das solltest du wohl auch setzen %d0 in der Zeile darüber (oder darunter), um dasselbe Laufwerk wie die Batch-Datei zu wechseln. Es ist eine gute Angewohnheit, sich den Pfad der Batchdatei zu merken.
trlkly
Nun, ich werde versuchen, es so zu machen, wie ihr es hier vorschlägt. Ich werde die Ergebnisse veröffentlichen, obwohl ich ein bisschen skeptisch bin, dass das Problem in Pfaden liegt, da alle Befehle ordnungsgemäß ausgeführt werden und nur 7zip zufällig gestoppt wird in der Mitte des Reißverschlussprozesses.
skroslak
0

Ich habe auch eine .bat-Datei von sheduler bekommen. Mein Problem war: Auf der Registerkarte "Einstellungen" wurde "Task stoppen, wenn er länger läuft:" angezeigt und ich habe das geändert. Aber der innere Auslöser hat dasselbe. Dadurch wurde meine Konsolenanwendung in 30 Minuten gestoppt (standardmäßig dort eingestellt). Also funktionierte es manuell, aber es wurde ein 0x41306-Fehler von shedule ausgeführt. Ich bin auf der Suche nach einer Lösung hierher gekommen, hoffe, es hilft jemandem.

Max
quelle