kugelschreiber
Goto Top

Ordner per Batch auf neue, nicht abgeholte Dateien überwachen

Vielleicht hilft es ja dem einen oder anderen in einer anderen oder ähnlichen Situation

Hallo Ihr Lieben,

Folgendes Szenario:

Wir haben einen BizTalk Server 2006 auf Windows 2003 32bit, der per Windows Service einen Eingangsordner (Receive Folder) auf neue Dateien überwacht (vorläufig XML Dateien) und dann entgegen nimmt. Dabei verschiebt (also löscht) der BizTalk Server die Datei aus dem Eingangsordner zur weiteren Verarbeitung (Orchestrierung usw.).
Nun haben wir mehrfach festgestellt, dass dies manchmal länger als 2 Minuten dauert. Im Normalfall sollte die Datei nicht länger als 1-2 Sekunden im Eingangsordner verweilen, bevor der Server sie abgreift.

Das Problem

Wie bekomme ich nun mit, wann ein sogenannter "Hänger im System" vorherrscht?

Die Lösung

Dazu habe ich mir ein Batch gebaut, welche im Abstand von 1 Minute per Windows Tasksplaner aufgerufen wird und mir im Falle, dass eine Datei länger als 1 Minute im Eingangsordner liegt, eine Email mit dem Dateinamen im Betreff schickt. Ich verwende dabei eigentlich drei Batchdateien:

  1. eingangs_ordner_pruefen.bat
  2. dateien_kopieren.bat
  3. email.bat

Wobei die eingangs_ordner_pruefen.bat die anderen beiden per call in zwei beinhaltenden Schleifen aufruft.
Als Programm zum Verschicken einer Email verwende ich blat, welches Ihr Euch alternativ hier besorgen könnt. Eine klitzekleine Anleitung zu blat findet Ihr hier

Aber nun zu den einzelnen Batch-Dateien.

Die Hauptdatei eingangs_ordner_pruefen.bat

@ECHO OFF
REM VARIABLEN
set server=mail.domain.de
set empfaenger=xxx@domain.de
set sender=yyy@domain.de
set projectpfad="C:\test"
set ordner1="C:\test\ordner1"
set ordner2="C:\test\ordner2"

REM Prüfen, ob im ordner1 noch daten drin sind, die bereits schon in ordner1 drin sind (Dann hat BizTalk versagt -> Email an xxx@)
CD %ordner2%
FOR %%A IN ("*.*") DO (
	if exist %ordner1%\%%A call C:\test\email.bat "%%A"
)

REM Prüfen, ob im ordner1 Dateien enthalten sind, die noch nicht im ordner2 enthalten sind (also neue Dateien -> kopieren in ordner2)
CD %ordner1%
FOR %%B IN ("*.*") DO (
	if not exist "%ordner2%"\"%%B" call C:\test\dateien_kopieren.bat "%%B"
)

REM Prüfen, ob im ordner2 Dateien enthalten sind, die nicht mehr in ordner1 enthalten sind (BizTalk hat funktioniert -> also alte Dateien -> löschen in ordner2)
CD %ordner2%
FOR %%C IN ("*.*") DO (
	if not exist "%ordner1%"\"%%C" del "%ordner2%"\"%%C"
)

Die Datei dateien_kopieren.bat

@echo off
REM Kopiert alle Dateien von ordner1 in ordner2
copy %ordner1%\%1 %ordner2%\%1

Die Datei email.bat

cd %projektordner%
blat.exe c:\Test\body.txt -server %server% -to %empfaenger% -f %sender% -s %1

Projekt Testen

Zum Testen des Projektes führt bitte folgende Schritte durch

  1. Legt Euch einen Ordner namens "test" auf "C:\" an
  2. Erstellt im Ordner "C:\test" einen Ordner namens "ordner1" und einen weiteren Ordner namens "ordner2"
  3. Erstellt nun die Batchdateien wie oben beschrieben (Diese sollten dann auch unter "C:\test" liegen)
  4. Kopiert Euch die "blat.exe" von der oben angegebenen Webseite ebenfalls ins Verzeichnis "C:\test"
  5. Erstellt Euch eine Datei namens "body.txt" und schreibt einen beliebigen Inhalt hinein (Das ist dann Euer Inhalt in der Email)
  6. Passt die Hauptdatei eingangs_ordner_pruefen.bat an Eure Einstellungen an (Emailserver und Adressen)
  7. Gehe nun in den "ordner1" und erstelle dort eine beliebige Testdatei (zum Beispiel ein leeres Textdokument namens "test.txt")
  8. Doppelklicke nun auf die Hauptdatei eingangs_ordner_pruefen.bat unter "c:\test" (Deine Testdatei "test.txt" in "ordner1" sollte im Anschluss nun in "ordner2" kopiert worden sein)
  9. Doppelklicke wieder auf die Hauptdatei eingangs_ordner_pruefen.bat unter "c:\test" (Nun liegt die Datei immer noch in "ordner1" -> also wirst Du per Email benachrichtigt, das eine Datei (Dateiname steht im Betreff der Email) schon länger im "ordner1" liegt. (Der Biztalkserver hat Sie also noch nicht abgeholt)
  10. Lösche nun die Datei aus "ordner1" (Simulation als ob der Biztalkserver die Datei schon abgeholt hat)
  11. Doppelklicke wieder auf die Hauptdatei eingangs_ordner_pruefen.bat unter "c:\test" (Nun wird die Testdatei "test.txt" aus ordner2 gelöscht, da Sie sich nicht mehr im "ordner1" befindet (Der BizTalk Server hat sie also schon abgeholt)

NACHTRAG

Dies ist keine Lösung des Problems, aber wir haben rausgefunden wann es aufgetren ist und haben festgesetllt, dass andere Prozesse zu dieser Zeit eine enorm hohe Auslastung hatten und somit der BizTalk Service die Dateien nicht entgegennehmen konnte.

Wer das o.g. Beispiel als Dateien haben möchte, kann mir eine private Nachricht mit seiner Emailadresse schicken, ich bemühe mich die Daten so schnell wie möglich zu versenden.

Wahrscheinlich entgegen jeder Regel, bitte ich Euch mir Verbesserungen, Anregungen oder gar Kritik per privater Nachricht zu schicken, damit ich es in diesem Artikel ver/ausbessern kann. Ihr werdet namentlich erwähnt, wenn dies gewünscht ist.
Somit bekommt der interessierte Leser nur einen Artikel und muss sich am Ende nicht durch 20 Anpassungen/Beiträgen den gesamten Code selber zusammensuchen.

Vielen Dank für Euer Verständnis

Gruß Kuli

PS: Vielen Dank an Johannes Dobler, der mich dabei unterstützt hat

Content-ID: 149518

Url: https://administrator.de/knowledge/ordner-per-batch-auf-neue-nicht-abgeholte-dateien-ueberwachen-149518.html

Ausgedruckt am: 26.12.2024 um 00:12 Uhr