peter32
Goto Top

Vernünftig eine einzige Logdatei pro Tag mit mehreren Restart des Programms oder Alternativlösung um Programmneustart zu vermeiden

Hallo,

ich verzweifel langsam bei dieser (zu erst dachte ich simplen) Aufgabe:

Ich habe ein Programm, dass bei bestimmten Punkten wieder von Vorne anfangen soll, ala "goto :Begin" und in dieselbe Log schreiben soll pro Tag.

Es ist sehr lange und ich habe bemerkt, dass mit einem "goto :Begin" das Programm mit jedem neuen "goto :Begin" immer langsamer wird. (Warum? Ich vermute, das hat etwas mit den dann gelöschten Variablen zutun? Vielleicht gibt es auch einen einfachen Befehl, der ähnliches bewirken kann?)

Jedenfalls, kam mir deshalb die Idee das komplette Programm immer neuzustarten, wenn es an den Anfang soll, damit die Performance viel besser wird.
An sich funktioniert das super, aber das mit der Logdatei geht nicht ganz...

Ich habe folgenden Code geschrieben:

ProgramLogged.bat:
@echo off & setlocal
set FileDateTime=App%date%_%time:~0,2%h%time:~3,2%m%time:~6,2%s
cd "C:\Progamm" > NUL  
program.bat > logs\%FileDateTime%.txt 2>&1


Program.bat:
@echo off & setlocal
:Begin
:: hier steht ganz viel code mit goto :end statt goto :begin
:end
start ProgramLogged.bat
exit
::pause

Das Problem hierbei ist, dass das Programm mehrere hundert Mal pro Tag neustartet und ich deshalb entsprechend viele Logfiles habe.

Dann hatte ich probiert mein ProgramLogged so umzuschreiben, dass es in dieselbe Log schreibt:

ProgramLogged.bat:
@echo off & setlocal
set FileDate=App%date%
cd "C:\Progamm" > NUL  
program.bat **>**> logs\%FileDateTime%.txt 2>&1

Hier bekomme ich aber ständig den Fehler, dass auf die Datei zugegriffen wird und deshalb nicht hineingeschrieben werden kann.

Wie kann ich diese "simple" Aufgabe am besten lösen?

Wie gesagt, wenn es eine alternative Lösung gibt, die ein Programmneustart vermeiden kann und damit dieselbe Performance erzielt, wie wenn das Programm neustartet höre ich davon gerne.

LG
Peter

Content-Key: 314744

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

Printed on: April 26, 2024 at 06:04 o'clock

Member: StefanKittel
Solution StefanKittel Sep 08, 2016 at 13:43:12 (UTC)
Goto Top
Hallo,

ich würde nicht die ganze Skriptausgabe umleiten, evtl. kommt daher auch Dein Performanceproblem, sondern die Zeilen die eine Ausgabe erzeugen (z.B. Echo) direkt in die Log-Datei schreiben lassen.

'> = Datei löschen und Text eintragen
'>> = Text am Ende anhängen

also
echo Start >> log1.txt

Stefan
Member: Peter32
Peter32 Sep 08, 2016 at 13:55:11 (UTC)
Goto Top
Danke das ist eine Super Idee!
Member: Peter32
Peter32 Sep 09, 2016 updated at 09:27:24 (UTC)
Goto Top
Hallo StefanKittel,

ich habe nun das einmal so ausprobiert und mein Programm über Nacht laufen lassen.

Jetzt ist mir allerdings wieder eingefallen, dass in dieser Variante die Fehler nicht mehr mitgeloggt werden... Ist das dennoch irgendwie relativ simpel möglich?

Ich kann statt "> NUL" am ende einer Befehlszeile natürlich auch ein ">> Datei.txt" machen, aber das schreibt mir nur den Status da rein.
Die eigentlichen Fehler werden im CMD Fenster gezeigt..
Member: Biber
Solution Biber Sep 09, 2016 at 13:00:19 (UTC)
Goto Top
Moin Peter,

die Fehler werden vermutlich auf einem anderen Ausgabekanal herausgeschrieben, d.h. nicht auf STDOUT (Kanal 1, Konsole, Bildschirm), sondern auf STDERR (Kanal 2).
Bedeutet,
  • wenn du jetzt ein ">NUL" an einer Zeile stehen hast, ist das die Kurzschreibweise von "1>NUL"=="Schreibe alle STDOUT-Meldungen ins Nirvana".
  • du kannst alle Fehlermeldungen des Batches/einzelner Zeilen =STDERR-Meldungen in eine Datei umleiten, indem du alternativ schreibst "1>NUL 2>>"D:\Ein\Pfad\DeinFehlerprotokoll" oder "1>>"D:\eine\Ergebnisse.txt" 2>>"D:\Ein\Pfad\DeinFehlerprotokoll".

Aber zum 7ten Mal: du hast immer noch das Problem, dass alles viel länger dauert/viel mehr Ressourcen braucht als erklärlich.
Willst diuda nicht mal langsam versuchen, dieses Phänomen einzugrenzen wie mehrfach vorgeschlagen?

Grüße
Biber
Member: Peter32
Peter32 Sep 12, 2016 at 14:12:51 (UTC)
Goto Top
Hi Biber,

danke, das probiere ich mal aus!

Naja also ich muss sagen, nachdem ich den Tipp von StefanKittel befolgt habe, ist es wesentlich besser geworden. Noch nicht perfekt allerdings.

Jedenfalls reicht mir das fürs erste von der Performance.

LG
Peter