Zschimmer GmbH Impressum und Kontakt

Scheduler     Erste Seite

  XML     API     Register


logo

Verzeichnisüberwachung mit Dateiaufträgen

Wenn eine Job-Kette Dateien aus einem Verzeichnis verarbeiten soll, können Sie Dateiaufträge verwenden. Ein Dateiauftrag ist ein Auftrag mit einem Verweis auf eine Datei. Der Scheduler überwacht das Verzeichnis und erzeugt zu jeder neuen Datei einen Dateiauftrag.

<job_chain name="my_job_chain">
    <file_order_source directory="path"/>
    <file_order_source directory="other_path" regex="regex"/>
    <job_chain_node  state="100" job="job_1 error_state="error"/>
    <job_chain_node  state="200" job="job_2 error_state="error"/>
    <file_order_sink state="ok" remove="yes"/>
    <file_order_sink state="error" move_to="/errorpath.../ "/>
</job_chain>

Siehe <job_chain>, <file_order_source> und <file_order_sink>.

Dateiauftragsquelle

Eine Dateiauftragsquelle <file_order_source> überwacht ein Verzeichnis. Wenn diesem ein Dateiname hinzugefügt wird, der dem optionalen Regulären Ausdruck entspricht, führt das zu einem Dateiauftrag.

<job_chain …>
    <file_order_source directory="…" regex="…"/>
    …

Ein Dateiauftrag ist ein Auftrag Order mit folgenden Eigenschaften:

order.state
Status des Auftrags ist der des ersten Jobs der Job-Kette oder der mit <file_order_source next_state="…"> eingestellte Zustand.
order.id
Kennung des Auftrags ist der Pfad, zusammengesetzt aus Verzeichnisname, wie er in der Auftragsquelle angegeben ist, und dem Dateinamen.
order.params.value( "scheduler_file_path" )
enthält den Pfad, derselbe Wert wie order.id. Diese für den Scheduler reservierte Variable macht einen Auftrag zum Dateiauftrag.

Reihenfolge der Dateiaufträge

Die ältesten Dateien (die mit der am weitesten zurückliegenden letzten Änderung) werden zuerst berücksichtigt.

Mehrere Auftragsquellen

Eine Job-Kette kann mehrere Auftragsquellen haben. Der Scheduler berücksichtigt sie in der angegebenen Reihenfolge.

Der Dateiauftrag überwacht die Datei

Der Scheduler entfernt einen Dateiauftrag, wenn die dazugehörige Datei nicht mehr im Verzeichnis steht und

Dateiaufträge, die in Ausführung sind, sind nicht betroffen.

Dieser Abgleich wird durchgeführt,

Auftragssenke: Datei verschieben oder entfernen

Am Ende der Ausführung des Auftrags kann die zugehörige Datei entfernt oder verschoben werden. Die mit <file_order_sink> definierten Zustände sind Endzustände.

Wenn aber die Datei bereits entfernt worden ist, gibt der Scheduler eine Warnung aus und der Dateiauftrag ist erledigt.

[warn] SCHEDULER-339 File does not exist and can therefore neither be moved nor removed: (1)

Wenn die Datei sich nicht entfernen bzw. verschieben lässt, gelangt der Auftrag auf die Schwarze Liste.

Datei verschieben

<file_order_sink state="…" move_to="directory_path">

Eine Datei gleichen Namens im Zielverzeichnis wird ohne Warnung überschrieben.

Datei entfernen

<file_order_sink state="…" remove="yes">

Schwarze Liste

Wenn ein Dateiauftrag ausgeführt ist (einen Endzustand erreicht hat), aber die Datei noch vorhanden ist, dann setzt der Scheduler den Auftrag auf die Schwarze Liste.

[warn] SCHEDULER-340 File still exists. Order has been set on the blacklist

Dort bleibt er bis

Damit wird verhindert, dass die Datei sofort zu einem neuen Dateiauftrag führt.

Verzeichnis-Fehler

Wenn die Verzeichnisüberwachung auf einen Fehler läuft, zum Beispiel weil das Verzeichnis abgehängt worden ist, dann gibt der Scheduler eine Warnung aus und erzeugt eine eMail (die Einstellungen aus factory.ini (Abschnitt [spooler]) gelten).

Der Scheduler versucht periodisch die Überwachung erneut zu starten. Fehlermeldungen dabei werden ignoriert. Die Periode ist einstellbar mit <file_order_source delay_after_error="…">. Wenn das Verzeichnis wieder lesbar ist, sendet der Scheduler eine entsprechende eMail und gibt diese Meldung aus:

[info] SCHEDULER-984 Recovered from previous error in directory (1)

Fehler beim Erstellen des Dateiauftrags

Wenn ein Dateiname nicht zu einem Auftrag gemacht werden kann (weil der Pfad zu lang ist für die Datenbankspalte scheduler_orders.id), dann merkt er sich den Pfad, um die Fehlermeldung nicht bei jedem Lesen des Verzeichnisses zu wiederholen, und setzt fort nach der Meldung

[warn] SCHEDULER-346 Due to previous error the path will be ignored: (1)

Wann wird das Verzeichnis gelesen?

Sobald der erste Job zum ersten Mal bereit ist, einen Auftrag auszuführen, liest der Scheduler das Verzeichnis (mit der Beschränkung durch den Regulären Ausdruck) und erzeugt daraus Dateiaufträge.

Wenn das Verzeichnis viele Dateien enthält (mehr als mit <file_order_source max="…"> eingestellt), dann verbleibt eine Liste der übrigen Dateien im Speicher, aus der der Scheduler später die weiteren Dateiaufträge erzeugt. Die Meldungen dazu sind:

[info] SCHEDULER-985 number(1) more file orders will be added later, after previous orders have been processed

[info] SCHEDULER-986 Continuing reading buffered directory (as of time(1))

Der Scheduler liest das Verzeichnis erneut, wenn

Verzeichnisüberwachung durch Microsoft® Windows®

Unter Windows lässt der Scheduler außerdem das Verzeichnis vom Betriebssystem überwachen. Eine Signalisierung veranlasst den Scheduler, das Verzeichnis vor Ablauf der Periode zu lesen. Damit reagiert der Scheduler sofort auf eine neue Datei.

Trotzdem sollte für ein Verzeichnis auf einem anderen Rechner das Wiederholungsintervall nicht mit <file_order_source repeat="no"> abgestellt werden. Die Windows-Verzeichnisüberwachung verstummt, wenn das Verzeichnis entfernt und wieder angelegt wird. Siehe außerdem Microsofts Article 188321: FindFirstChangeNotification May Not Notify All Processes on File Changes. Das Wiederholungsintervall erneuert die Verzeichnisüberwachung periodisch.

Auftragsgesteuerte Nicht-API-Jobs (<process> und <script language="shell">)

Einen auftragsgesteuerten <process>-Job startet der Scheduler für jeden Dateiauftrag.

Die Umgebungsvariable SCHEDULER_TASK_TRIGGER_FILES enthält den Dateipfad.


Software- und Organisations-Service GmbH

Zuletzt geändert von aa, 2008-01-25