Job Scheduler Erste Seite – Was ist ein Job? |
Ein Job, der in einem Verzeichnis eintreffende Dateien verarbeitet, kann sich der Verzeichnisüberwachung bedienen. Mit dem Aufruf Job.start_when_directory_changed() sorgt der Scheduler dafür, dass eine Task läuft, sobald sich das Verzeichnis ändert.
Sie können den Aufruf für mehrere Verzeichnisse wiederholen.
Der Aufruf kann im Scheduler-Skript (Element <script> in <config>) oder im Job selbst (in spooler_init()) untergebracht sein. Im letzten Fall muss der Job einmal laufen, damit der Aufruf auch ausgeführt wird (s. <run_time once="yes">).
Wenn eine Datei oder ein Unterverzeichnis hinzugefügt, gelöscht oder umbenannt wird.
Der Methode Job.start_when_directory_changed() können Sie einen Regulären Ausdruck (nach POSIX 1003.2) übergeben. Der Scheduler betrachtet dann das Verzeichnis nur als geändert, wenn es nach der Änderung eine Datei oder ein Verzeichnis enthält, dessen Name zum Regulären Ausdruck passt.
Wenn Sie mehrere Verzeichnisse überwachen, gibt der Aufruf Task.changed_directories() die Namen der geänderten Verzeichnisse zurück, durch Semikolon getrennt.
Task.trigger_files liefert die aus Verzeichnis und Dateinamen zusammengesetzten Pfade, auf die der Reguläre Ausdruck (wenn vorhanden) zutrifft.
Nicht-API-Jobs (<process> und <script language="shell">) steht der Inhalt von Task.trigger_files in der Umgebungsvariablen SCHEDULER_TASK_TRIGGER_FILES zur Verfügung.
Wenn z.B. ein Verzeichnis nicht mehr zugreifbar ist (gelöscht oder nicht mehr erreichbar), gilt das als Änderung und der Scheduler startet eine Task.
Ein wiederholter Aufruf von Job.start_when_directory_changed() führt dann zu einem Fehler.
Konfiguration für einen Job, der alle Dateien in einem Verzeichnis verarbeitet und dann löscht (Vorsicht beim Test! Der Job löscht wirklich!)
<?xml version="1.0"?>
<spooler>
<config>
<process_classes/>
<jobs>
<job name="import">
<script java_class="spooler_job.Import"><![CDATA[
package spooler_job;
import java.io.File;
import sos.spooler.*;
public class Import extends sos.spooler.Job_impl
{
String[] paths;
int index;
public boolean spooler_open()
{
spooler_log.info( "changed_directories=" + spooler_task.changed_directories() );
spooler_log.info( "trigger_files=" + spooler_task.trigger_files() );
paths = spooler_task.trigger_files().split( ";" );
index = 0;
return index < paths.length;
}
public boolean spooler_process()
{
File file = new File( paths[ index++ ] );
spooler_log.info( "Processing file " + file );
file.delete();
return index < paths.length;
}
}
]]></script>
</job>
</jobs>
</config>
</spooler> Zuletzt geändert von Joacim Zschimmer, 2007-11-09 |