jobscheduler - Flipbeets.com

Transcription

jobscheduler - Flipbeets.com
Job Automation
Job Scheduling
JOBSCHEDULER
Technical Description
August 2014
Software- und Organisations-Service GmbH
Giesebrechtstr. 15
10629 Berlin Germany
Telephone +49 30 86 47 90-0
JobScheduler
2
Impressum
Software- und Organisations-Service GmbH
Giesebrechtstr. 15
D-10629 Berlin
Telefon +49 (30) 86 47 90-0
Telefax +49 (30) 8 61 33 35
Mail [email protected]
Web www.sos-berlin.com
Letzte Aktualisierung: August 2014
Software- und Organisations-Service GmbH
August 2014
JobScheduler
3
Inhaltsverzeichnis
1 ...............................................................................................................7
1.1 Konfiguration in XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.1 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.2 Codierung der XML-Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.1.3 Schema der Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
1.2 Konfiguration aus Hot Folders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
1.2.1 Konfigurationsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
1.2.2 Dateien für Prozessklassen, Sperren, Jobs, Job-Ketten und Daueraufträge . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
1.2.3 Spiegelung des Verzeichnisses im JobScheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
1.2.4 Wirkung der Kommandos zum Ändern und Löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
1.2.5 Verhalten der einzelnen Objekttypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
1.2.5.1 Prozessklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
1.2.5.2 Sperren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
1.2.5.3 Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
1.2.5.4 Job-Ketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
1.2.5.5 Verschachtelte Job-Ketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
1.2.5.6 Daueraufträge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
1.2.6 Kommando <show_state> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
1.3 Zentrale Konfiguration durch einen Supervisor JobScheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
1.3.1 Eine typische Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
1.3.2 Der Supervisor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
1.3.3 Einen JobScheduler an den Supervisor anmelden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
1.3.4 Wirksamkeit von lokalen Änderungen an der Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
1.3.5 Übernehmen einer vorhandenen Konfiguration in die zentrale Verwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
1.3.6 Verhalten der JobScheduler beim Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
1.3.6.1 Workload JobScheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
1.3.6.2 Supervisor JobScheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
1.4 Datei factory.ini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
1.5 Datei sos.ini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
1.6 Einstellungen, die den Abruf von Umgebungsvariablen mit ${…} erlauben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
1.6.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
1.6.2 factory.ini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
1.6.3 sos.ini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
1.7 Der Scheduler von der Kommandozeile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
1.8 JobScheduler Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
1.8.1 GUI für Konfiguration und Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
1.8.1.1 Aufruf JobScheduler Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
1.8.1.2 Scheduler Konfiguration erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
1.8.1.3 Vorhandene Konfigurationsdatei öffnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
1.8.1.4 Empfohlene Vorgehensweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
1.8.1.5 Job Wizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
1.8.1.6 Scheduler Job Dokumentation erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
1.8.1.7 Hot Folder editieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
1.8.1.8 Remote Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
1.9 Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
1.9.1 Einstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130
1.9.2 Programmschnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
1.9.3 Kommandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
1.9.4 Fehlertoleranz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
1.10 Historie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
1.10.1 1. Gegenstand der Historie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
1.10.2 2. Historiendatei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Software- und Organisations-Service GmbH
August 2014
JobScheduler
4
1.10.2.1 2.1 Einfache Dateien (tabulierte Dateien) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133
1.10.2.2 2.2 Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133
1.10.2.3 2.3 Konfiguration in der Datei factory.ini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
1.10.2.4 2.4 Startanlässe (cause) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
1.10.3 3. Task-Kennung und extra Felder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
1.10.3.1 3.1 Extra Felder in der tabulierten Datei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
1.10.3.2 3.2 Extra Felder in der Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
1.10.4 4. Lesen der Historie über die TCP-Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
1.10.5 5. Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
1.11 Der JobScheduler als Dienst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
1.12 Backup JobScheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
1.12.1 JobScheduler Backup Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
1.12.1.1 Voraussetzungen für den JobScheduler Backup Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
1.12.1.2 Starten des JobScheduler Backup Clusters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
1.12.1.3 Kommandozeilenparameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
1.12.1.4 Beenden von JobSchedulern im Backup Cluster mit den Funktionen der Web-Oberfläche . . . . . . 141
1.12.1.5 Primären JobScheduler nach Ausfall reaktivieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
1.12.1.6 Backup JobScheduler übernimmt die Verarbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142
1.12.1.7 Verhalten des Dienstes unter Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
1.12.1.8 Verhalten beim Neustart des Rechners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
1.12.1.9 Einen inaktiven Backup JobScheduler zum aktiven primären JobScheduler machen . . . . . . . . . . . . 143
1.12.1.10 Kommandos des Startscript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
1.12.1.11 Weiterführende Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
2 Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
2.1 Was ist ein Job? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
2.1.1 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
2.1.2 Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
2.1.3 Zustand eines Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146
2.1.4 Zustand des Jobs ändern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
2.1.5 Eine Task starten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
2.1.6 Sperren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
2.1.7 Verzeichnisüberwachung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
2.1.8 Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147
2.2 Spooler-Skripte als COM-Klassen implementieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148
2.3 Sperren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
2.3.1 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
2.3.2 Sperren in Job-Ketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
2.4 Externe Job-Verarbeitung mit Agenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
2.4.1 Verwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154
2.4.2 Voraussetzungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
2.4.3 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
2.4.4 Monitor-Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
2.4.5 Kontext der API-Aufrufe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
2.4.6 Konfigurations-Dateien> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
2.4.7 Protokolldateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
3 Auftragssteuerung und Dateiverarbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
3.1 Aufträge und Job-Ketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
3.1.1 Job-Ketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
3.1.2 Auftragswarteschlange und Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158
3.1.3 Verzeichnisüberwachung mit Dateiaufträgen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
3.1.4 Priorität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
3.1.5 Wann enden die Tasks? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
3.1.6 Beschleunigung des Auftragsdurchlaufs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158
3.1.7 Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
3.2 Verzeichnisüberwachung mit Dateiaufträgen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
3.2.1 Dateiauftragsquelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Software- und Organisations-Service GmbH
August 2014
JobScheduler
5
3.2.1.1 Reihenfolge der Dateiaufträge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
3.2.1.2 Mehrere Auftragsquellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
3.2.2 Der Dateiauftrag überwacht die Datei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
3.2.3 Auftragssenke: Datei verschieben oder entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
3.2.3.1 Datei verschieben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
3.2.3.2 Datei entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
3.2.4 Schwarze Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
3.2.5 Verzeichnis-Fehler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161
3.2.5.1 Fehler beim Erstellen des Dateiauftrags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
3.2.6 Wann wird das Verzeichnis gelesen? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
3.2.6.1 Verzeichnisüberwachung durch Microsoft® Windows® . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
3.2.7 Auftragsgesteuerte Nicht-API-Jobs (<process> und <script language="shell">) . . . . . . . . . . . . . . . . . . . . . . 162
3.3 Verzeichnisüberwachung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
3.3.1 Was ist eine Änderung eines Verzeichnisses? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
3.3.2 Mit Regulärem Ausdruck filtern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
3.3.3 Welches Verzeichnis hat sich geändert? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
3.3.4 Welche Dateien stehen im Verzeichnis? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .162
3.3.5 Fehler bei der Verzeichnisüberwachung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163
3.3.6 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
3.4 Verteilte Aufträge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
3.4.1 Load Balancing mit verteilten Aufträgen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
3.4.1.1 Voraussetzungen für Verteilte Aufträge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
3.4.1.2 Starten des JobScheduler Clusters für verteilte Aufträge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
3.4.1.3 Erzeugen verteilter Aufträge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
3.4.1.4 Verteilte Aufträge durch add_order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
3.4.1.5 Verteilte Dateiaufträge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
3.4.1.6 Standalone-Jobs in verteilten Schedulern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
3.4.1.7 Verteilungsalgorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167
4 Protokolle und eMail-Versand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
4.1 Protokolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
4.1.1 Umfang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
4.1.2 Meldungs-Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
4.1.3 Plattenplatzmangel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
4.1.4 Ablage in den Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
4.1.5 Programmschnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
4.1.6 eMail-Versand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
4.1.7 Anzeigen der Protokolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
4.2 eMail-Versand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
4.2.1 Einstellungen zur eMail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
4.2.2 eMails nach dem Ende einer Task . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
4.2.3 Rangfolge der Einstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
4.2.4 eMails, wenn der JobScheduler wegen eines Fehlers sich beendet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
4.2.5 Installation mit JavaMail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171
4.3 Log Categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
5 Kommunikation und Bedienung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
5.1 HTTP Server und Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
5.1.1 Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
5.1.2 Bedienung über einen Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
5.1.3 Zugriffsschutz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
5.1.4 Protokolle mit einem Browser zeigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174
5.1.5 Job-Beschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.1.6 Built-In Graphical User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.2 XML-Kommandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
5.2.1 XML-Antworten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .206
5.3 Beendigung des Schedulers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
5.3.1 Ordentliches Beenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Software- und Organisations-Service GmbH
August 2014
JobScheduler
6
5.3.2 Ordentliches Beenden mit Frist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
5.3.3 Abbruch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Anhang A: Meldungen des Schedulers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
A.1 Messages für Paket Scheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
A.2 Messages für Paket Separate processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
A.3 Messages für Paket Charset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Anhang B: Änderungsprotokoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Anhang C: Vom JobScheduler verwendete SQL-Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
C.1 Vom JobScheduler verwendete SQL-Anweisungen für DB2® . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
C.2 Vom JobScheduler verwendete SQL-Anweisungen für Microsoft SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
C.3 Vom JobScheduler verwendete SQL-Anweisungen für MySQL® . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
C.4 Vom JobScheduler verwendete SQL-Anweisungen für Oracle® . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
C.5 Vom JobScheduler verwendete SQL-Anweisungen für PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
C.6 Vom JobScheduler verwendete SQL-Anweisungen für Sybase ASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Anhang D: Skripte in JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
D.1 Java-Exceptions in Spidermonkey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Software- und Organisations-Service GmbH
August 2014
7
1
1.1 Konfiguration in XML
Beim Start des JobScheduler geben Sie die Datei an, die die mit XML formulierte Konfiguration enthält.
1.1.1 Beispiel
Eine einfache Konfigurationsdatei mit einem Shell Job:
<?xml version="1.0"?>
<spooler>
<config>
<jobs>
<job name="hallo_welt">
<script language="shell"><![CDATA[
echo hallo welt
]]></script>
<run_time repeat="10"/>
</job>
</jobs>
</config>
</spooler>
Konfiguriert ist hier der Job hallo_welt, den der JobScheduler alle 10 Sekunden wiederholen wird.
Wenn diese Konfiguration in der Datei hallo_welt.xml abgelegt ist, können Sie den JobScheduler so starten (für
Windows):
…scheduler installation path…\bin\scheduler.exe -config=hallo_welt.xml
Ein gestarteter JobScheduler kann mit Ctrl-C abgebrochen werden.
Alternativ können individuelle Konfigurationsdateien pro Job, Jobkette etc. gebildet werden, die nur die von diesem
Objekt benötigten Elemente enthalten:
<?xml version="1.0">
<job>
<script language="shell"><![CDATA[
echo hallo welt
]]></script>
<run_time repeat="10"/>
</job>
Wenn diese Konfiguration in der Datei scheduler installation path/config/live/hallo_welt.job.xml
abgelegt ist, wird sie automatisch von einem laufenden JobScheduler verwendet:
Software- und Organisations-Service GmbH
August 2014
8
1.1.2 Codierung der XML-Konfiguration
<?xml encoding="UTF-8"?> und
<?xml encoding="ISO-8859-1"?> sind möglich.
Der JobScheduler verarbeitet nur 8bit-Zeichen (ISO-8859-1).
1.1.3 Schema der Konfiguration
Der JobScheduler prüft die XML-Konfiguration gegen das XML-Schema des Schedulers (Nur im IE korekt
dargestellt.)
Klicken Sie auf ein XML-Element, um dessen Beschreibung zu sehen.
<spooler>
<config central_configuration_directory = "…"
configuration_add_event
= "…"
configuration_delete_event = "…"
configuration_directory
= "…"
configuration_update_event = "…"
include_path
= "…"
ip_address
= "…"
log_dir
= "…"
mail_xslt_stylesheet = "…"
param
= "…"
port
= "4444"
priority_max
= "1000"
spooler_id
= ""
supervisor
= "hostname:4444"
tcp_port
= "4444"
udp_port
= "4444"
time_zone
= "...">
<base file="…"/>
<params>
<param name="…" value="…"/>
</params>
<security>
<allowed_host name="…" level="…"/>
…
</security>
<cluster heart_beat_own_timeout = "…"
heart_beat_timeout
= "…"
heart_beat_warn_timeout = "…"/>
<process_classes ignore = "no">
<process_class max_processes = "…"
name
= "…"
spooler_id
= "…"/>
…
</process_classes>
Software- und Organisations-Service GmbH
August 2014
9
<schedules>
<schedule name
substitute
valid_from
valid_to
…
</schedules>
=
=
=
=
"…"
"…"
"…"
"…"/>
<locks>
<lock name= "…" …/>
…
</locks>
<script com_class = "…"
filename
= "…"
java_class = "…"
language
= "…" >
<include file="…"/>
<![CDATA[
programm-code…
]]>
</script>
<http_server>
<http.authentication scheme="basic">
<http.users>
<http.user name="…" password_md5="…"/>
…
</http.users>
</http.authentication>
<http_directory path="…" url_path="…"/>
<web_service job_chain="…" url_path="…" …>
<params>
<param name="…" value="…"/>
…
</params>
</web_service>
…
</http_server>
<holidays>
<holiday date="…"/>
<include file="…"/>
<weekdays date="…"/>
</holidays>
<jobs>
<job
force_idle_timeout = "yes|no"
idle_timeout
= "…"
ignore_signals = "…"
java_options
= "…"
min_tasks
= "…"
Software- und Organisations-Service GmbH
August 2014
10
name
order
priority
process_class
spooler_id
stop_on_error
tasks
temporary
timeout
title
visible
=
=
=
=
=
=
=
=
=
=
=
"…"
"no"
"…"
"…"
"…"
"yes"
"1"
"no"
"…"
"…"
"yes"
>
<settings>
…
</settings>
<description> … </description>
<lock.use lock="…" …/>
<environment>
<variable name="…" value="…"/>
…
</environment>
<params>
<param name="…" value="…"/>
…
</params>
<script com_class = "…"
filename
= "…"
java_class = "…"
language
= "…" >
<include file="…"/>
<![CDATA[ programm-code… ]]>
</script>
oder
<process file
= "…"
ignore_error = "no"
ignore_signal= "no"
log_file
= ""
param
= "" >
</process>
<monitor name
= "…"
ordering
= "…">
<script language="…" …>…<script/>
</monitor>
<start_when_directory_changed
directory="…"
<delay_after_error
error_count="…" />
delay="…"
<delay_order_after_setback
Software- und Organisations-Service GmbH
delay="…"
regex="…" />
is_maximum="yes|no"
August 2014
11
setback_count="…" />
<run_time let_run="no">
<period begin
end
let_run
repeat
single_start
when_holiday
=
=
=
=
=
=
"00:00"
"24:00"
"…"
"…"
"…"
"…"
/>
<date date="yyyy-mm-dd"/>
…
<weekdays>
<day day="…">
<period …/>
…
</day>
…
</weekdays>
<monthdays>
<day day="…">
<period …/>
…
</day>
<weekday weekday="…" which="…">
<period …/>
…
</weekday>
…
</monthdays>
<ultimos>
<day day="…">
<period …/>
…
</day>
…
</ultimos>
<month month="…">
<period begin
end
let_run
repeat
single_start
<weekdays>
<day day="…">
<period …/>
…
</day>
…
</weekdays>
<monthdays>
<day day="…">
Software- und Organisations-Service GmbH
=
=
=
=
=
"00:00"
"24:00"
"…"
"…"
"…"
/>
August 2014
12
<period …/>
…
</day>
<weekday weekday="…" which="…">
<period …/>
…
</weekday>
…
</monthdays>
<ultimos>
<day day="…">
<period …/>
…
</day>
…
</ultimos>
…
</month>
<holidays>
<holiday date="yyyy-mm-dd"/>
<include file="…"/>
…
</holidays>
<at at="yyyy-mm-dd HH:MM:SS"/>
</run_time>
<commands on_exit_code="…">
<start_job job="…" …>
<params>
<param name="…" value="…"/>
<copy_params from="task"/>
<copy_params from="order"/>
…
</params>
</start_job>
<add_order job_chain="…" …>
<params>
<param name="…" value="…"/>
<copy_params from="task"/>
<copy_params from="order"/>
…
</params>
</add_order>
…
</commands>
</job>
…
</jobs>
<job_chains>
<job_chain
distributed
Software- und Organisations-Service GmbH
= "no"
August 2014
13
name
=
orders_recoverable=
title
=
visible
=
"…"
"yes"
"…"
"yes"
>
<file_order_source
delay_after_error = "…"
directory
= "…"
max
= "…"
next_state
= "…"
regex
= "…"
repeat
= "…"
/>
…
<job_chain_node
delay
= "…"
error_state = "…"
job
= "…"
next_state = "…"
on_error
= "suspend|resume"
state
= "…"
/>
…
<file_order_sink
move_to
= "…"
remove
= "yes"
state
= "…"
/>
…
</job_chain>
<job_chain name="…">
<job_chain_node.job_chain
job_chain
= "…"
error_state = "…"
next_state = "…"
state
= "…"
/>
…
<job_chain_node.end
state
= "…"
/>
…
</job_chain>
…
</job_chains>
<commands>
…
</commands>
</config>
</spooler>
Software- und Organisations-Service GmbH
August 2014
14
XML-Elemente
XML-Element <add_order>
<add_order
job_chain
id
replace
priority
title
state
web_service
at
end_state
= "name"
= "id"
= "yes|no"
= "zahl"
= "text"
= "text"
= "name"
= "timestamp"
= "text"
Startzeit des Auftrags
Zustand, vor dessen erfolgreichen Verlassen
der Auftrag enden soll
>
params
run_time
xml_payload
</add_order>
Parameter
Laufzeiten
Fügt einen neuen Auftrag hinzu.
Wenn Sie das Element <params> angegeben, erstellt der JobScheduler ein Variable_set und stellt es dem Job in
Order.payload() zur Verfügung.
Beispiel:
<add_order job_chain="jobkette" id="1234" title="Mein erster Auftrag" state="100"
at="now+3:00">
<params>
<param name="ein_parameter" value="ein Wert"/>
</params>
</add_order>
Eltern Elemente
<commands> - XML-Kommandos
Attribute
job_chain="name"
Die Jobkette, in die der Auftrag eingetragen werden soll.
id="id"
Die Kennung des Auftrags (alphanumerisch).
replace="yes|no" (Initialwert:yes)
replace="no": Job_chain.add_order() wird gerufen.
replace="yes": Job_chain.add_or_replace_order() wird gerufen.
Software- und Organisations-Service GmbH
August 2014
15
priority="zahl"
title="text"
Der Titel des Auftrags.
state="text"
web_service="name"
Wenn der Auftrag ausgeführt worden ist (das Ende der Jobkette erreicht hat), wird er mit einem Stylesheet
transformiert und einem Web-Dienst übergeben.
Siehe <web_service> (Seite 73).
at="timestamp" (Initialwert:now) Startzeit des Auftrags
"now", "yyyy-mm-dd HH:MM[:SS]", "now + HH:MM[:SS]" und "now + SECONDS" sind möglich.
Siehe auch Order.at .
end_state="text" Zustand, vor dessen erfolgreichen Verlassen der Auftrag enden soll
Wie Order.end_state .
XML-Element <allowed_host>
<allowed_host
host
level
> </allowed_host>
= "host"
= "level"
<allowed_host> gibt den Namen oder die IP-Nummer eines Rechners an, der Verbindung mit dem JobScheduler
aufnehmen darf.
Die IP-Nummer kann eine Netzwerkadresse sein (Klasse A, B oder C). Dann werden alle Rechner des Netzwerks
zugelassen. Das ist der Fall, wenn der letzte Teil der IP-Nummer 0 ist. Der JobScheduler beachtet eine genau
angegebene IP-Nummer vor einer Netzwerkadresse.
Beispiel:
<security>
<allowed_host host="127.0.0.1"
level="all"/>
<allowed_host host="admin.company.com" level="all"/>
<allowed_host host="192.168.1.0"
level="info"/>
</security>
Die IP-Adressen 127.0.0.1 und admin.company.com und die Adressen im Klasse-C-Netzwerk 192.168.1 dürfen sich
mit dem JobScheduler verbinden. Der letzte Eintrag beschränkt die Kommandos auf die, die Informationen liefern.
Software- und Organisations-Service GmbH
August 2014
16
Beispiel:
<security>
<allowed_host host="0.0.0.0" level="all"/>
</security>
Jeder Rechner hat vollen Zugriff.
Verhalten mit <base>
Ergänzt ein Element <allowed_host> an der entsprechenden Stelle mit gleichem Attribut host= aus der
Basiskonfiguration. Hier angegebene Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<security> - Zugriffsschutz für TCP, HTTP und UDP
Attribute
host="host"
host ist der Name oder die IP-Adresse des Rechners, für den der Zugriffsschutz eingestellt werden soll. Es kann
auch die IP-Nummer eines Netzwerks sein.
Ein Eintrag mit host="0.0.0.0" gilt für alle sonst hier nicht angegebenen Hosts.
level="level"
level="none"
Der Rechner hat keinen Zugriff.
level="signal"
Der Rechner darf signalisierende Kommandos ausführen.
level="info"
Der Rechner darf Kommandos ausführen, die Informationen liefern, aber den Zustand des Schedulers nicht
ändern.
level="no_add"
Der Rechner hat vollen Zugriff, nur <add_jobs> , <job> und <add_order> sind gesperrt.
level="all"
Der Rechner hat vollen Zugriff.
XML-Element <at>
<at
at
> </at>
Software- und Organisations-Service GmbH
= "yyyy-mm-dd hh:mm[:ss]"
August 2014
17
Eltern Elemente
<run_time> - Laufzeiten
Attribute
at="yyyy-mm-dd hh:mm[:ss]"
Legt einen Startzeitpunkt mit Datum und Uhrzeit fest.
XML-Element <base>
<base
file
> </base>
= "filename"
Mit <base> können Sie eine Basiskonfiguration angegeben. Eine Basiskonfiguration liegt in einer eigenen Datei mit
demselben Aufbau einer XML-Konfiguration (Seite 7) (sie beginnt also wieder mit <spooler> ). In der
Basiskonfiguration können Sie Einstellungen vornehmen, die die übergeordnete Konfiguration (die das Element <
base> enthält) ergänzt oder überschreibt.
Der JobScheduler verarbeitet die Basiskonfiguration zuerst.
Zum Beispiel kann die Basiskonfiguration die Jobs definieren, während die übergeordnete Konfiguration die
Laufzeiten ( <run_time> ) einstellt.
Eine Basiskonfiguration kann auf eine weitere Basiskonfiguration verweisen. Der JobScheduler prüft nicht, ob eine
Basiskonfiguration selbstbezüglich aufgerufen wird.
<base> können Sie wiederholt angeben. Der JobScheduler arbeitet sie der Reihe nach ab. Die zweite
Basiskonfiguration ergänzt oder überschreibt die Einstellungen der ersten.
Eltern Elemente
<config> - Konfiguration
Attribute
file="filename"
filename gibt den Dateinamen der Basiskonfiguration an.
Wenn der Dateiname nicht absolut ist, geht der JobScheduler vom Verzeichnis der Konfigurationsdatei aus, die das
<base>-Element enthält.
Die XML-Elemente in der Basiskonfiguration werden mit dem Recht <allowed_host level="all"> ausgeführt.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
XML-Element <cluster>
<cluster
heart_beat_timeout
heart_beat_own_timeout
heart_beat_warn_timeout
> </cluster>
Software- und Organisations-Service GmbH
= "seconds"
= "seconds"
= "seconds"
August 2014
18
Das Elememt wirkt nur in Verbindung mit den Optionen -exclusive oder -distributed-orders .
Verhalten mit <base>
Ergänzt ein Element <cluster> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<config> - Konfiguration
Attribute
heart_beat_timeout="seconds" (Initialwert:60)
Wenn der Herzschlag eines anderen aktiven Schedulers im Cluster sich um diese Frist verspätet, wird der dieser
JobScheduler für tot erklärt.
Wenn der eigene JobScheduler inaktiv ist und mit der Option -exclusive betrieben wird, kann er anschließend
aktiv werden.
Meldungen
[warn]
SCHEDULER-836
Deactivating that dead Scheduler [warn]
SCHEDULER-996
No heart beat for seconds (time) - JobScheduler seems to be dead heart_beat_own_timeout="seconds" (Initialwert:55)
Die Einstellung dient zur Selbstkontrolle des Schedulers. Wenn der eigene Herzschlag sich um diese Frist
verspätet, bricht der JobScheduler sofort ab und startet sich neu. Damit kommt der JobScheduler der
Deaktivierung durch einen anderen JobScheduler zuvor, und verhindert den kurzzeitigen Parallelbetrieb wegen
verzögerten Herzschlags.
Meldungen
[ERROR]
SCHEDULER-386
Last heart beat was time, seconds ago. Something is delaying JobScheduler
execution, the JobScheduler is aborted immediately heart_beat_warn_timeout="seconds" (Initialwert:10)
Wenn der Herzschlag eines Schedulers sich um diese Frist verspätet, wird eine Warnung ausgegeben.
Meldungen
[warn]
SCHEDULER-994
No heart beat for seconds (time), expecting heart beat within seconds [warn]
SCHEDULER-995
No heart beat for seconds (time), ignored for seconds because of recent
database reconnect Software- und Organisations-Service GmbH
August 2014
19
XML-Element <commands>
<commands
on_exit_code
= "exitcodes"
>
add_jobs
add_order
Auftrag hinzufügen
licence.use
modify_job
modify_order
modify_spooler
scheduler_log.log_categ
ories.reset
scheduler_log.log_categ
ories.set
scheduler_log.log_categ
ories.show
show_history
show_job
show_jobs
show_job_chains
show_state
start_job
Eine Task starten
terminate
</commands>
Das Element fasst eine Folge von Kommandos zusammen. Wann die Kommandos ausgeführt werden, hängt vom
Eltern-Element ab.
Eltern Elemente
<config> - Konfiguration
<job> - Definition eines Jobs
Attribute
on_exit_code="exitcodes"
Innerhalb von <job> ist dieses Attribut Pflicht, woanders kann es nicht verwendet werden.
Gibt die Exit-Codes an, die zur Ausführung der hier aufgeführten Kommandos führen sollen. Als Wert kann
angegeben werden:
•
•
•
•
•
Eine Liste von Exit-Codes, die einzelnen Zahlen durch Blanks getrennt.
on_exit_code="success" ist dasselbe wie on_exit_code="0".
on_exit_code="error" gilt für alle Exit-Codes außer 0 und außer der bereits in anderen <commands
exit_code="…"> angegeben Exit-Codes.
Nur Unix: Eine mit Signal beendete Task (durch kill oder Programmfehler) hat einen Exit-Code mit dem
negativen Wert des Signals. Bei dem Betriebssystem-Kommando kill auf die Task wäre das -15.
Die Signalnamen können angegeben werden: SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGTRAP, SIGABRT, SIGIOT,
SIGBUS, SIGFPE, SIGKILL, SIGUSR1, SIGSEGV, SIGUSR2, SIGPIPE, SIGALRM, SIGTERM, SIGSTKFLT, SIGCHLD,
SIGCONT, SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU, SIGURG, SIGXCPU, SIGXFSZ, SIGVTALRM, SIGPROF, SIGWINCH,
SIGPOLL, SIGIO, SIGPWR und SIGSYS. Signal-Namen, die das Betriebsystem nicht kennt, werden mit Warnung
ignoriert.
Siehe auch <job ignore_signals="…"> (Seite 37).
Software- und Organisations-Service GmbH
August 2014
20
Beispiel:
on_exit_code="0"
on_exit_code="1 2 3 99"
on_exit_code="error"
on_exit_code="SIGTERM SIGKILL"
Meldungen
[ERROR]
SCHEDULER-324
Invalid value for attribute exit_code="" in <commands> [ERROR]
SCHEDULER-325
Attribute exit_code is not applicable here [ERROR]
SCHEDULER-326
<commands on_exit_code="">: <commands> for exit code is already defined [ERROR]
SCHEDULER-327
Last error occurred when executing command: xml_command [warn]
SCHEDULER-337
Signal is unknown on this operating system and is ignored [info]
SCHEDULER-328
Executing <commands on_exit_code="">: XML-Element <config>
<config
central_configuration_direc
tory
configuration_directory
configuration_add_event
configuration_modify_event
= "path"
= "path"
= "job_path"
= "job_path"
configuration_delete_event = "job_path"
supervisor
spooler_id
port
tcp_port
= "host:port"
= "spooler_id"
= "number"
= "number"
udp_port
= "number"
param
log_dir
time_zone
include_path
mail_xslt_stylesheet
= "text"
= "verzeichnis"
= "text"
= "verzeichnis"
= "path"
ip_address
= "ip_number"
Lokales Konfigurationsverzeichnis
Job für neue Konfigurationsdatei
Job
für
geänderte
Konfigurationsdatei
Job
für
gelöschte
Konfigurationsdatei
Portnummer für TCP und UDP
HTTP- und TCP-Port für
Kommandos an den JobScheduler
UDP-Port für Kommandos an den
JobScheduler
Zur freien Verwendung
Verzeichnis der Protokolle
Zeitzone des JobSchedulers
Verzeichnispfad für <include>
Pfad des XSLT-Stylesheets zur
eMail-Aufbereitung
IP-Adresse der Schnittstelle für
TCP und UDP
>
base
params
security
cluster
process_classes
script
scheduler_script
http_server
holidays
Software- und Organisations-Service GmbH
Basiskonfiguration
Parameter
Zugriffsschutz für TCP, HTTP und UDP
Einstellungen für den Cluster-Betrieb
Prozessklassen
Programm-Code
HTTP-Server
Feiertage
August 2014
21
jobs
job_chains
commands
</config>
Jobs
Jobketten
XML-Kommandos
<config> enthält die Konfiguration des Schedulers, vor allem die Jobs. Das Element kann wiederholt werden,
wenn das Attribut spooler_id wechselt. Wenn bei Scheduler-Start der Parameter -id= nicht angegeben worden
ist, ist das erste <config>, sonst das mit gleichem Wert im Attribut spooler_id wirksam.
Verhalten mit <base>
Ergänzt ein Element <config> an der entsprechenden Stelle mit gleichem Attribut spooler_id= aus der
Basiskonfiguration. Hier angegebene Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<spooler> - Wurzelelement des XML-Dokuments
Attribute
central_configuration_directory="path" (Initialwert:remote)
Voreingestellt ist das Verzeichnis remote im Verzeichnis der Konfigurationsdatei, siehe -config .
Das Verzeichnis ist für den Supervisor-Betrieb, bei dem andere JobScheduler sich anmelden mit <config
supervisor="…"> . Das Verzeichnis kann für jeden JobScheduler ein Unterverzeichnis mit Konfigurationsdateien
enthalten, die der Supervisor zum JobScheduler laufend repliziert.
JobScheduler in einem Cluster ( -exclusive oder -distributed-orders ) erhalten ihre Konfiguration aus einem
Verzeichnis mit dem Namen der Scheduler-ID ( -id ).
Scheduler, die nicht zu einem Cluster gehören, erhalten Ihre Konfiguration aus einem Verzeichnis, dessen Name
aus Rechnername und TCP-Portnummer ( <config tcp_port="…"> ) gebildet wird: hostname#tcpport .
Für beide Fälle gilt, dass zusätzlich Dateien aus dem Verzeichnis _all übertragen werden. Diese Dateien sind
nachrangig.
Es ist möglich, für einen JobScheduler kein Verzeichnis anzugeben. Dann wird nur die Konfiguration aus dem
Verzeichnis _all, falls vorhanden, übertragen.
Meldungen
[warn]
SCHEDULER-454
Remote configuration directories '' and '' refer to the same IP number [warn]
SCHEDULER-457
Remote JobScheduler '' has not been registered [info]
SCHEDULER-455
No configuration directory for '' configuration_directory="path" (Initialwert:live) Lokales Konfigurationsverzeichnis
Voreingestellt ist das Verzeichnis live im Verzeichnis der Konfigurationsdatei, siehe -config .
Diesem Verzeichnis entnimmt der JobScheduler die Definitionen der Jobs usw., siehe (Seite 78).
configuration_add_event="job_path" Job für neue Konfigurationsdatei
Software- und Organisations-Service GmbH
August 2014
22
Der angegebene Job wird gestartet, wenn der JobScheduler eine neue Datei aus dem Konfigurationsverzeichnis
geladen hat.
Der Job wird gestartet, so wie es seine <run_time> zulässt. Er sollte in der Scheduler-Konfigurationsdatei definiert
sein, damit er bekannt ist, wenn der JobScheduler das Konfigurationsverzeichnis liest.
Die gestartete Task hat drei Parameter (erreichbar über Task.params ):
Diese
Task-Parameter
stehen
auch
bereit
als
Umgebungsvariablen
SCHEDULER_LIVE_EVENT,
SCHEDULER_LIVE_FILEPATH und SCHEDULER_LIVE_FILEBASE.
configuration_modify_event="job_path" Job für geänderte Konfigurationsdatei
Der angegebene Job wird gestartet, wenn der JobScheduler eine geänderte Datei aus dem
Konfigurationsverzeichnis geladen hat.
Der Job wird gestartet, so wie es seine <run_time> zulässt. Er sollte in der Scheduler-Konfigurationsdatei definiert
sein, damit er bekannt ist, wenn der JobScheduler das Konfigurationsverzeichnis liest.
Parameter und Umgebungsvariablen sind gesetzt wie bei <config configuration_add_event="…"> .
configuration_delete_event="job_path" Job für gelöschte Konfigurationsdatei
Der angegebene Job wird gestartet, wenn aus dem Konfigurationsverzeichnis eine im JobScheduler geladene
Datei entfernt worden ist.
Der Job wird gestartet, so wie es seine <run_time> zulässt. Er sollte in der Scheduler-Konfigurationsdatei definiert
sein, damit er bekannt ist, wenn der JobScheduler das Konfigurationsverzeichnis liest.
Parameter und Umgebungsvariablen sind gesetzt wie bei <config configuration_add_event="…"> .
supervisor="host:port"
Der Supervisor, bei dem sich dieser JobScheduler an- und abmelden soll. Das geschieht asynchron und Fehler
beeinträchtigen nicht den Betrieb.
Wenn der Haupt-Scheduler unter Windows läuft, sollten nicht mehr als vier JobScheduler sich bei ihn anmelden.
Der
Supervisor kann für den JobScheduler die Konfiguration bestimmen, s. <c o n f i g
central_configuration_directory="…"> . Die übernommene Konfiguration hält der JobScheduler im
Verzeichnis cache.
spooler_id="spooler_id"
Das Element ist nur wirksam, wenn dieses Attribut gleich dem Parameter -id= vom Scheduler-Start ist, oder wenn
beim Scheduler-Start der Parameter -id= nicht angegeben worden ist.
port="number" (Initialwert:0) Portnummer für TCP und UDP
Fasst die Einstellungen tcp_port und udp_port zusammen.
Siehe auch <config tcp_port="…"> (Seite 20). und <config udp_port="…"> (Seite 20).
Software- und Organisations-Service GmbH
August 2014
23
Beispiel:
<config port="4444">
Die Option -port hat Vorrang.
tcp_port="number" (Initialwert:0) HTTP- und TCP-Port für Kommandos an den JobScheduler
Der JobScheduler kann auf einem TCP-Port während des Betriebs Kommandos entgegennehmen. Hier kann eine
Portnummer eingestellt werden. Die Portnummer ist eine Zahl zwischen 2048 (betriebssystemabhängig) und
65535. Die Voreinstellung lautet 4444.
Über denselben Port betreibt der JobScheduler einen HTTP/HTML-Server, so dass er über einen Browser
ansprechbar ist, z.B. http://localhost:4444.
Bei tcp_port=0 (voreingestellt) ist der JobScheduler nicht über TCP oder HTTP ansprechbar. Damit kann die
Steuerung des JobSchedulers per TCP-Kommando, z.B. über eine Web-Seite, unterbunden werden.
Siehe auch <config port="…"> (Seite 20).
Beispiel:
<config tcp_port="4444">
Die Option -tcp-port hat Vorrang.
udp_port="number" (Initialwert:0) UDP-Port für Kommandos an den JobScheduler
Auch über UDP kann der JobScheduler Kommandos entgegennehmen. Hier wird die Portnummer angegeben. Ein
Kommando muss in eine Nachricht passen. Der JobScheduler schickt keine Antwort.
Bei udp_port=0 (voreingestellt) öffnet der JobScheduler keinen UDP-Port.
Siehe auch <config port="…"> (Seite 20).
Beispiel:
<config udp_port="4444">
Die Option -udp-port hat Vorrang.
param="text" Zur freien Verwendung
Setzt spooler.param (Objekt spooler, Eigenschaft param). Zur freien Verwendung in den Skripten.
log_dir="verzeichnis" Verzeichnis der Protokolle
Gibt das Verzeichnis an, an das der JobScheduler die Protokoll schreibt.
log_dir="*stderr" lässt den JobScheduler das Hauptprotokoll nach stderr schreiben.
time_zone="text" Zeitzone des JobSchedulers
Software- und Organisations-Service GmbH
August 2014
24
Bestimmt nach welcher Zeitzone ein Auftrag bzw. Job startet. Die Angabe einer Zeitzone folgt dabei der tz
Datenbank. Eine Liste möglicher Zeitzonen befindet sich in der Dokumentation der Joda API, welche für die
Zeitfunktionen verwendet wird.
Fehlt die Angabe einer Zeitzone, arbeitet der JobScheduler mit der locale Einstellung des Rechners.
Beispiel:
<config time_zone="Europe/Berlin">
Die Option -time-zone hat Vorrang.
include_path="verzeichnis" Verzeichnispfad für <include>
Verzeichnis der Dateien, die mit <include> eingezogen werden.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Die Option -include-path hat Vorrang.
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag include_path= …) wird damit überschrieben.
mail_xslt_stylesheet="path" Pfad des XSLT-Stylesheets zur eMail-Aufbereitung
Der Pfad eines XSLT-Stylesheets. Der JobScheduler verwendet das XSLT-Stylesheet zum Aufbereiten der eMails.
(Die Dokumentation hierzu ist noch nicht geschrieben.)
ip_address="ip_number" (Initialwert:0.0.0.0) IP-Adresse der Schnittstelle für TCP und UDP
Die IP-Adresse, an die TCP- und UDP-Port gebunden werden. Der JobScheduler ist dann nur über diese
IP-Adresse erreichbar.
Ein Hostname kann angegeben werden.
Default ist 0.0.0.0, was für alle IP-Adressen steht.
Wenn eine andere IP-Adresse als 127.0.0.1 oder localhost angegeben ist, kann der JobScheduler nicht über
localhost erreicht werden.
Die Option -ip-address hat Vorrang.
XML-Element <content>
<content > </content>
Eltern Elemente
<service_request> - Web-Dienst-Anforderung
XML-Element <copy_params>
<copy_params
from
> </copy_params>
Software- und Organisations-Service GmbH
= ""
Quelle der Parameter
August 2014
25
Das Element übernimmt die Parameter der Task oder des Auftrags. Es kann in <start_job> und <add_order> in
folgender Hierarchie verwendet werden:
<job>
…
<commands on_exit_value="…">
…
<start_job>
oder <add_order>
…
<params>
…
<copy_params from="order">
Bei doppelten Parameternamen entscheidet die Reihenfolge von <copy_params> und <param> , welcher
Parameterwert verwendet wird. Ein nachfolgender Parameter überschreibt einen vorangehenden mit gleichen
Namen.
Eltern Elemente
<params> - Parameter
Attribute
from="" Quelle der Parameter
from="task"
Die Parameter der Task ( Task.params ) werden übernommen.
from="order"
Die Parameter des zuletzt ausgeführten Auftrags ( Order.params ) werden übernommen. Der Auftrag steht
am Ende der Task nur zur Verfügung, wenn
•
•
•
der Job mit <process> oder <script language="shell"> implementiert ist,
während der Ausführung Task.end() aufgerufen worden ist oder
während der Ausführung ein Fehler aufgetreten ist.
Es ist ein Fehler ( SCHEDULER-329 ), wenn der Job nicht auftragsgesteuert ist ( <job order="no"> ).
Meldungen
[ERROR]
SCHEDULER-329
<copy_params from=""/>: requested parameters are not available Software- und Organisations-Service GmbH
August 2014
26
XML-Element <date>
<date
date
>
period
</date>
= "yyyy-mm-dd"
Periode
setzt die Perioden für einen bestimmten Tag fest.
Siehe auch <at> (Seite 16).
Beispiel:
<date date="2004-08-22">
<period begin="10:00" end="12:00"/>
<period begin="16:00" end="22:00"/>
</date>
Beispiel:
<date date="2004-09-02" begin="14:00" end="18:00"/>
Verhalten mit <base>
Ersetzt ein Element <date> an der entsprechenden Stelle mit gleichem Attribut date= aus der Basiskonfiguration.
Eltern Elemente
<run_time> - Laufzeiten
Attribute
date="yyyy-mm-dd"
Das Datum.
XML-Element <day>
<day
day
>
period
</day>
= "zahl"
Periode
Setzt die Perioden für einen bestimmten Tag fest.
Verhalten mit <base>
Ersetzt ein Element <day> an der entsprechenden Stelle mit gleichem Attribut day= aus der Basiskonfiguration.
Software- und Organisations-Service GmbH
August 2014
27
Eltern Elemente
<weekdays> - Perioden für bestimmte Wochentage
<monthdays> - Perioden für bestimmte Tage des Monats
<ultimos> - Perioden für bestimmte Tage des Monats, vom Ende her gezählt
Attribute
day="zahl"
Gibt die Nummer des Tages an, abhängig vom Eltern-Element, bei Wochentagen auch die englischen Namen.
Mehrere Tage können durch Leerzeichen getrennt angegeben werden.
XML-Element <delay_after_error>
<delay_after_error
error_count
delay
= "integer"
=
"seconds|HH:MM|HH:MM:SS|stop"
> </delay_after_error>
Siehe Job.delay_after_error .
Beispiel:
<job …>
<script …>…</script>
<delay_after_error error_count= "2"
<delay_after_error error_count= "5"
<delay_after_error error_count="10"
<delay_after_error error_count="20"
</job>
delay="10"
delay="00:01"
delay="24:00"
delay="STOP"
/>
/>
/>
/>
<!-- 10 Sekunden -->
<!-- Eine Minute -->
<!-- Ein Tag -->
Nach einem Fehler wiederholt der JobScheduler den Job sofort.
Nach dem zweiten bis zum vierten Fehler verzögert der JobScheduler den Job um 10 Sekunden,
nach dem fünften bis zum neunten Fehler um eine Minute,
nach dem zehnten bis zum neunzehnten um 24 Stunden,
nach dem zwanzigsten aufeinanderfolgenden Fehler schließlich stoppt der Job.
Eltern Elemente
<job> - Definition eines Jobs
Attribute
error_count="integer"
Anzahl der aufeinanderfolgenden Jobfehler, ab der die Verzögerung gilt.
delay="seconds|HH:MM|HH:MM:SS|stop"
Frist, nach der der Job wiederholt wird.
Software- und Organisations-Service GmbH
August 2014
28
delay="stop" oder delay="STOP" lässt den Job bei dieser Anzahl aufeinanderfolgender Fehler stoppen.
XML-Element <delay_order_after_setback>
<delay_order_after_setback
setback_count
= "integer"
delay
= "seconds|HH:MM|HH:MM:SS"
is_maximum
= "yes|no"
> </delay_order_after_setback>
- nach dem ersten Fehlversuch wird der Job im Abstand von 10min erneut ausgeführt.
- nach dem fünften Fehlversuch wird der Job nur noch im Abstand von 30min ausgeführt.
- Nach dem zehnten Fehlversuch läuft der Job noch 1x und bricht bei erneutem Fehler ab.
Beispiel:
<delay_order_after_setback setback_count="1" is_maximum="no" delay="00:10"/>
<delay_order_after_setback setback_count="5" is_maximum="no" delay="00:30"/>
<delay_order_after_setback setback_count="10" is_maximum="yes" />
Siehe Job.delay_order_after_setback , Job.max_order_setbacks und Order.setback() .
Eltern Elemente
<job> - Definition eines Jobs
Attribute
setback_count="integer"
Für die 1., 2. usw. aufeinanderfolgende Rückstellung desselben Auftrags können verschiedene Fristen eingestellt
werden.
Gibt an, ab der wievielten Rückstellung des Auftrags dieses XML-Element gilt.
Z.B. bei setback_count=5 gilt das Element erst ab der 5. Rückstellung.
delay="seconds|HH:MM|HH:MM:SS"
Frist für die Rückstellung. Nach Ablauf der Frist kommt der Auftrag erneut in diesem Job zu Ausführung.
is_maximum="yes|no" (Initialwert:no)
Attribut setback_count= gibt die maximale Anzahl aufeinanderfolgender Rückstellungen an. Bei einer weiteren
Rückstellung ( Order.setback() ) versetzt der JobScheduler den Auftrag in den Fehlerzustand
Job_chain_node.error_state .
Siehe Job.max_order_setbacks .
XML-Element <description>
<description >
include
</description>
Software- und Organisations-Service GmbH
Fügt Text aus einer Datei ein
August 2014
29
Eine Beschreibung des Jobs, die in der HTML-Oberfläche gezeigt wird. Der Text sollte in HTML codiert sein (das ist
wegen der strikten DTD des Schedulers nur möglich, wenn Sie <![CDATA[...]]> oder <include> verwenden).
Beispiel:
<job name="my_job">
<description>
Here follows the description of the job:
<include file="description_of_my_job.txt"/>
</description>
...
</job>
Verhalten mit <base>
Ersetzt ein Element <description> an der entsprechenden Stelle aus der Basiskonfiguration.
Eltern Elemente
<job> - Definition eines Jobs
XML-Element <environment>
<environment >
variable
</environment>
Eine Variable
Bestimmt die zusätzlichen Umgebungsvariablen für einen Prozess.
Eltern Elemente
<job> - Definition eines Jobs
<process> - Externes Programm (alternativ zu <script>)
<start_job> - Eine Task starten
XML-Element <file_order_sink>
<file_order_sink
state
remove
move_to
> </file_order_sink>
= "string"
= "yes|no"
= "directory_path"
<file_order_sink> ist mit dem internen Job scheduler_file_order_sink implementiert.
Der Auftrag ist nach der Operation erledigt.
Wenn die Datei nicht entfernt oder verschoben werden kann, gelangt der Auftrag auf die Schwarze Liste. Damit
wird verhindert, dass die noch vorhandene Datei erneut zu einem Dateiauftrag wird. Aufträge auf der Schwarzen
Liste können mit <remove_order> entfernt werden. Wenn der JobScheduler bemerkt, dass die Datei entfernt
Software- und Organisations-Service GmbH
August 2014
30
worden ist, streicht er den Auftrag von der Schwarzen Liste. Die Datei kann dann erneut ins Verzeichnis gestellt
werden.
Siehe auch Verzeichnisüberwachung mit Dateiaufträgen (Seite 159) und <file_order_source> (Seite 30).
Eltern Elemente
<job_chain> - Jobkette
Attribute
state="string"
Zustand, für den dieser Jobkettenknoten gilt. Der Zustand ist ein Endzustand.
remove="yes|no"
remove="yes" entfernt die Datei.
Meldungen
[info]
SCHEDULER-979
Removing file move_to="directory_path"
Die Datei wird in das Verzeichnis verschoben. Eine gleichnamige vorhandene Datei wird überschrieben.
Unter Unix wird die Datei nur im selben Dateisystem verschoben.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Meldungen
[info]
SCHEDULER-980
Moving file to XML-Element <file_order_source>
<file_order_source
directory
regex
delay_after_error
repeat
max
next_state
> </file_order_source>
= "directory_path"
= "regex"
= "seconds"
= "no|seconds"
= "integer"
= "string"
Fügt einer Jobkette eine Dateiauftragsquelle hinzu. Jeder Dateiname in dem Verzeichnis, der dem Regulären
entspricht, wird der Jobkette als Dateiauftrag hinzugefügt.
Siehe auch Verzeichnisüberwachung mit Dateiaufträgen (Seite 159) und <file_order_sink> (Seite 29).
Software- und Organisations-Service GmbH
August 2014
31
Beispiel:
<job_chain name="my_job_chain">
<file_order_source directory="/tmp/input"/>
<job_chain_node state="first" job="process_file" error_state="ERROR"/>
<file_order_sink state="remove" remove="yes"/>
<file_order_sink state="ERROR" move_to="/tmp/input.error"/>
</job_chain>
Eltern Elemente
<job_chain> - Jobkette
Attribute
directory="directory_path"
Pfad des Verzeichnisses, dass die Dateien enthält.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
regex="regex"
Wenn Sie hier einen Regulären Ausdruck angeben, werden nur Dateinamen beachtet, die ihm entsprechen.
delay_after_error="seconds" (Initialwert:repeat)
Voreingestellt ist der Wert des Attributs repeat="…".
Wenn das Verzeichnis nicht lesbar ist, verschickt er eine eMail und versucht der JobScheduler es periodisch
erneut, bis er Erfolg hat. Dann verschickt er eine weitere eMail.
Meldungen
[info]
SCHEDULER-984
Recovered from previous error in directory repeat="no|seconds"
Der JobScheduler prüft periodisch das Verzeichnis auf Veränderung. Die Länge der Periode kann hier angegeben
werden.
Unter Windows ist repeat="60" voreingestellt. Außerdem nutzt der JobScheduler zusätzlich die in Windows
integrierte Verzeichnisüberwachung, so dass er auf eine Änderung des Verzeichnisses sofort reagiert. Sie wird
nach Ablauf des Wiederholungsintervalls erneuert.
Unter Unix ist repeat="10" voreingestellt. Das Verzeichnis wird alle 10 Sekunden auf Veränderung geprüft.
Meldungen
[info]
SCHEDULER-984
Recovered from previous error in directory max="integer" (Initialwert:100)
Software- und Organisations-Service GmbH
August 2014
32
Die Zahl der in einem Zug als Aufträge zu übernehmenden Dateien. Wenn mehr Dateien vorliegen, übernimmt er
sie, sobald der erste Job der Jobkette einen weiteren Auftrag ausführen kann.
Meldungen
[info]
SCHEDULER-985
number more file orders will be added later, after previous orders have been
processed [info]
SCHEDULER-986
Continuing reading buffered directory (as of time) next_state="string"
Wenn die Aufträge nicht in den ersten Job der Jobkette gespeist werden sollen, kann hier der anfängliche Zustand
der Aufträge angegeben werden.
XML-Element <holiday>
<holiday
date
> </holiday>
= "yyyy-mm-dd"
Setzt einen Feiertag fest, an dem der JobScheduler einen Job nicht laufen lassen soll.
Beispiel:
<holiday date="2004-12-24"/>
Verhalten mit <base>
Ersetzt ein Element <holiday> an der entsprechenden Stelle mit gleichem Attribut date= aus der
Basiskonfiguration.
Eltern Elemente
<holidays> - Feiertage
Attribute
date="yyyy-mm-dd"
Das Datum des Feiertags.
XML-Element <holidays>
<holidays >
weekdays
holiday
include
</holidays>
Software- und Organisations-Service GmbH
Perioden für bestimmte Wochentage
Feiertag, an dem ein Job nicht laufen soll
Fügt Text aus einer Datei ein
August 2014
33
Beispiel:
<holidays>
<weekdays>
<day day="saturday sunday"/>
</weekdays>
<holiday date="2004-12-24"/>
<holiday date="2004-12-25"/>
<holiday date="2004-12-26"/>
<holiday date="2004-12-31"/>
<include file="holidays-2007.xml"/>
<include file="holidays-2008.xml"/>
</holidays>
Eltern Elemente
<config> - Konfiguration
<run_time> - Laufzeiten
XML-Element <http.authentication>
<http.authentication
scheme
>
http.users
</http.authentication>
= "scheme"
Authentifizierungsverfahren
Benutzer zur HTTP-Authentifizierung
Mit diesem Element verlangt der JobScheduler vom HTTP-Client (Browser) eine Authentifizierung nach RFC 2617,
Verfahren »Basic«.
Die Authentifizierung gilt auch für die <web_service> .
Beispiel:
<http_server>
<http.authentication>
<http.users>
<http.user name="Rose Kemp"
password_md5="701d051b67bc5fc7c7c919d01f0aa7cb"/>
<http.user name="Jeff Beck"
password_md5="eb6801a466d5376639e29cd1d11ecb9f"/>
</http.users>
</http.authentication>
…
</http_server>
Verhalten mit <base>
Ergänzt ein Element <http.authentication> an der entsprechenden Stelle aus der Basiskonfiguration. Hier
angegebene Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<http_server> - HTTP-Server
Software- und Organisations-Service GmbH
August 2014
34
Attribute
scheme="scheme" (Initialwert:basic) Authentifizierungsverfahren
Nur scheme="basic" ist möglich.
XML-Element <http.user>
<http.user
name
password_md5
> </http.user>
= "name"
= "string"
Benutzerkennung zur Authentifizierung
MD5-Summe des Kennworts
Siehe <http.authentication> (Seite 33).
Verhalten mit <base>
Ersetzt ein Element <http.user> an der entsprechenden Stelle mit gleichem Attribut name= aus der
Basiskonfiguration.
Eltern Elemente
<http.users> - Benutzer zur HTTP-Authentifizierung
Attribute
name="name" Benutzerkennung zur Authentifizierung
password_md5="string" MD5-Summe des Kennworts
Unter Unix kann die MD5-Summe des Kennworts gewöhnlich mit dem Kommando md5sum ermittelt werden:
echo -n 'password' | md5sum
Die MD5-Summe besteht nur aus den Hexadezimalziffern 0-9, a-f und A-F und ist 32 Zeichen lang.
Meldungen
[ERROR]
SCHEDULER-427
Invalid MD5 hexadecimal coded password for HTTP user '' XML-Element <http.users>
<http.users >
http.user
</http.users>
Benutzer zur HTTP-Authentifizierung
Siehe <http.authentication> (Seite 33).
Verhalten mit <base>
Software- und Organisations-Service GmbH
August 2014
35
Ergänzt ein Element <http.users> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<http.authentication> - HTTP-Authentifizierung
XML-Element <http_directory>
<http_directory
url_path
path
> </http_directory>
= "url_path"
= "path"
Erstes Verzeichnis im URL-Pfad
Pfad des Dateisystems
Bestimmt ein Verzeichnis des Dateisystems, das auf ein Verzeichnis im URL-Pfad abgebildet werden soll.
Im Beispiel liefert der URL http://host:port/doc/xml/http_directory.html
die Datei c:\pub\html\doc\xml/http_directory.html.
Verhalten mit <base>
Ergänzt ein Element <http_directory> an der entsprechenden Stelle aus der Basiskonfiguration. Hier
angegebene Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<http_server> - HTTP-Server
Attribute
url_path="url_path" Erstes Verzeichnis im URL-Pfad
Gibt das erste Verzeichnis im URL-Pfad an, auf das ein Verzeichnis des Dateisystems abgebildet werden soll.
Das Verzeichnis wird mit Schrägstrich am Beginn angegeben.
Beispiel:
<http_directory url_path="/doc/" path="c:/html/my_doc/" />
Bildet das Verzeichnis c:/html/my_doc/ ab auf URL-Pfade, die mit /doc/ beginnen.
path="path" Pfad des Dateisystems
Der Pfad im Dateisystem, der auf das url_path="" angegebene Verzeichnis abgebildet werden soll.
Beispiel:
path="c:\pub\html\doc\"
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Software- und Organisations-Service GmbH
August 2014
36
XML-Element <http_server>
<http_server >
http_directory
web_service
</http_server>
HTTP-Dateiverzeichnis
Web-Dienst
Verhalten mit <base>
Ergänzt ein Element <http_server> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<config> - Konfiguration
XML-Element <include>
<include
file
live_file
node
> </include>
= "filename"
= "path"
= "xpath"
Pfad der einzufügenden Datei
Pfad der einzufügenden Datei aus dem
Konfigurationsverzeichnis
XPath-Ausdruck
Dieses Element kann in den Text gestreut werden (aber außerhalb von <![CDATA[ und ]]>), um Quell-Code, der
in anderen Dateien steht, einzuziehen.
Wenn der JobScheduler die einzuziehende Datei nicht lesen kann:
•
•
Im Element <description>: Der JobScheduler ignoriert Fehler, fügt aber die Fehlermeldung in die <
description> ein.
Im Element <script>: Der JobScheduler versetzt den Job in den Zustand read_error. Das Kommando <
modify_job cmd="reread"> lässt den JobScheduler das Skript erneut lesen.
Eltern Elemente
<script> - Programm-Code
<description> - Beschreibung
<holidays> - Feiertage
<params> - Parameter
Attribute
file="filename" Pfad der einzufügenden Datei
Der Name der Datei, deren Inhalt eingefügt werden soll. Wenn der Dateiname nicht absolut ist, dann geht der
JobScheduler abhängig vom umgebenden XML-Element von verschiedenen Verzeichnissen aus:
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
live_file="path" Pfad der einzufügenden Datei aus dem Konfigurationsverzeichnis
Software- und Organisations-Service GmbH
August 2014
37
Das Attribut kann verwendet werden direkt unter
•
•
•
•
<job><description>
<job><params>
<holidays>
<script>
und gibt den Pfad der Datei an, deren Inhalt eingefügt werden soll, relativ zum Verzeichnis der Datei, aus der das <
include> stammt. Er muss sich innerhalb des Konfigurationsverzeichnisbaums befinden. " /" am Anfang
bezeichnet die Wurzel des Konfigurationsverzeichnisses. Windows-Laufwerksbuchstaben können nicht verwendet
werden.
Wenn die Datei, die das <include> enthält, nicht aus einem Konfigurationsverzeichnis stammt, geht der
JobScheduler von der Wurzel des Konfigurationsverzeichnisses aus.
Unter <job><params> und <order><params> führt eine Änderung der Datei zum erneuten Lesen des Jobs bzw.
Auftrags, falls er dateibasiert ist, also aus einem Konfigurationsverzeichnis stammt.
[ERROR]
SCHEDULER-461
Path reaches beyond root (too many '..'):
[ERROR]
SCHEDULER-417
Invalid name: ''
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
node="xpath" XPath-Ausdruck
Wirkt nur für <include> in <params> und wählt die einzulesenden <param> -Elemente aus. Voreingestellt ist
xpath="params/*".
XML-Element <job>
<job
spooler_id
name
title
order
process_class
tasks
min_tasks
= ""
= "jobname"
= "text"
= "yes_no"
= "prozessklasse"
= "zahl"
= "zahl"
timeout
idle_timeout
= "dauer"
= "dauer"
force_idle_timeout
= "yes_no"
priority
temporary
java_options
visible
ignore_signals
stop_on_error
replace
warn_if_shorter_than
= "process_priority"
= "yes_no"
= "string"
= "yes|no|never"
= "all|signalnames"
= "yes|no"
= "yes|no"
=
"HH:MM:SS|seconds|percentage%"
=
"HH:MM:SS|seconds|percentage%"
warn_if_longer_than
Software- und Organisations-Service GmbH
Auftragsgesteuerter Job
Maximale Anzahl Tasks
Mindeste Anzahl der stets
laufenden Tasks
Frist für eine Operation
Frist für den Zustand
waiting_for_order
idle_timeout beendet Task
trotz min_task
August 2014
38
enabled
= "yes|no"
Deaktiviert einen Job.
>
settings
description
lock.use
params
environment
script
process
monitor
start_when_directory_ch
anged
delay_after_error
delay_order_after_setba
ck
run_time
commands
</job>
Einstellungen für einen Job
Beschreibung
Deklaration einer Sperre
Parameter
Umgebungsvariablen
Programm-Code
Externes Programm (alternativ zu <script>)
Monitor, zum Überwachen des Jobs
Verzeichnis überwachen
Job nach Fehler verzögern
Auftrag nach Rückstellung verzögern
Laufzeiten
XML-Kommandos
Definiert einen Job mit Programmcode, Laufzeit usw.
Verhalten mit <base>
Ergänzt ein Element <job> an der entsprechenden Stelle mit gleichem Attribut name= aus der Basiskonfiguration.
Hier angegebene Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<jobs> - Jobs
Attribute
spooler_id=""
name="jobname"
Jeder Job hat einen eigenen Namen.
Wenn ein Job mit demselben Namen in einer Basiskonfiguration bereit definiert worden ist, können hier die
Einstellungen des Jobs geändert oder ergänzt werden.
title="text"
Eine einzeilige Beschreibung des Jobs.
order="yes_no" Auftragsgesteuerter Job
Bei order="yes" ist der Job auftragsgesteuert. Der JobScheduler startet diesen Job nur, wenn ein Auftrag vorliegt.
Ein Skript kann mit Job.order_queue das Attribut prüfen.
process_class="prozessklasse"
Software- und Organisations-Service GmbH
August 2014
39
Gibt den Namen der Prozessklasse an, in der Tasks dieses Jobs laufen sollen. Die Prozessklassen werden mit <
process_classes> definiert.
tasks="zahl" (Initialwert:1) Maximale Anzahl Tasks
Von einem Job können mehrere Tasks gleichzeitig laufen. Dieses Attribut begrenzt deren Anzahl.
<lock.use> : Zusammen mit einer exklusiven Sperre ist nur tasks="1" sinnvoll, sie erlaubt nur eine Task.
min_tasks="zahl" (Initialwert:0) Mindeste Anzahl der stets laufenden Tasks
Der JobScheduler sorgt dafür, das wenigstens die angegebene Anzahl Tasks läuft. So lassen sich
auftragsgesteuerte Tasks in Bereitschaft bringen, die sehr lange für ihre Initialisierung brauchen.
<job tasks="…"> muss groß genug sein.
Der JobScheduler startet weitere Tasks, wenn
•
•
•
•
•
•
der JobScheduler startet
oder eine Task sich beendet hat
oder eine neue Periode ( <run_time> ) beginnt
oder bei <modify_job cmd="unstop"> : der Job wird entstoppt
oder bei <modify_job cmd="continue"> : alle Tasks des Jobs werden fortgesetzt
oder bei <modify_job cmd="wake"> : der Job wird geweckt
•
•
•
und weniger Tasks laufen als mit min_tasks verlangt
und die <run_time> mit einer Periode den Start zulässt
und der Job im Zustand pending oder running ist (also nicht gestoppt wird oder gestoppt ist).
Um ein Heißlaufen zu verhindern, startet der JobScheduler keine neuen Tasks, nachdem sich eine sofort beendet
hat. Nur in folgenden Fällen führt das Ende einer Task zum Start einer neuen:
•
•
•
•
spooler_process() wurde aufgerufen.
Die Task wartete eine Zeitlang auf einen Auftrag (Zustand running_waiting_for_order, nicht wenn <job
idle_timeout="0"> ).
Die Task startete, wurde aber mit Task.delay_spooler_process verzögert.
Die Task ist ein Prozess ( <process> oder <script language="shell"> ) und der Prozess hat sich nicht
sofort nach Start beendet.
Meldungen
[ERROR]
SCHEDULER-322
min_tasks= is greater than max_tasks= [warn]
SCHEDULER-970
task ended immediately after start, so min_tasks= doesn't lead to new tasks [debug3] SCHEDULER-969
Less than min_tasks= are running. New tasks will be started. Reason: timeout="dauer" Frist für eine Operation
Befristet eine Task-Operation (spooler_open, spooler_process etc.) oder bei einer Nicht-API-Task ( <process> oder
<script language="shell"> ) die ganze Task. Nach Ablauf der Frist bricht der JobScheduler die Task ab.
dauer kann in Sekunden oder im Format HH:MM oder HH:MM:SS angegeben werden.
idle_timeout="dauer" (Initialwert:5) Frist für den Zustand waiting_for_order
Software- und Organisations-Service GmbH
August 2014
40
Begrenzt den Leerlauf eines auftragsgesteuerten Jobs (order="yes"). Wenn eine Task auf den nächsten Auftrag
wartet und in der Frist kein Auftrag eintrifft, beendet der JobScheduler sie.
dauer kann in Sekunden oder im Format HH:MM oder HH:MM:SS angegeben werden.
idle_timeout="never" lässt den Job unbegrenzt laufen, nur noch abhängig von <run_time> .
Siehe auch <job force_idle_timeout="…"> (Seite 37).
force_idle_timeout="yes_no" (Initialwert:no) idle_timeout beendet Task trotz min_task
Nur wirksam mit <job min_tasks ≥ "0"> und <job idle_timeout="…"> .
force_idle_timeout="yes" beendet nach Ablauf von idle_timeout die Task, auch wenn daraufhin min_tasks
unterschritten wird. Erst anschließend führt min_tasks zum Start einer neuen Task.
Damit lassen sich Tasks beenden, die im Leerlauf eine Ressource (z.B. eine Datenbank) nicht zu lange belegen
dürfen, weil diese sich sonst abkoppelt.
priority="process_priority"
Eingestellt können die Werte idle, below_normal, normal, above_normal und high oder die numerischen Werte
des Betriebsystems.
Wenn die Priorität nicht gesetzt werden kann, führt das nicht zu einem Fehler.
Ein Prozess mit hoher Priorität kann Ihren Rechner blockieren.
Siehe Task.priority_class .
temporary="yes_no"
Bei temporary="yes" ist der Job temporär. Nur für <add_jobs> . Nach der Ausführung wird der Job gelöscht und
ist dann unbekannt.
java_options="string"
Wirkt nur, wenn der Job als eigener Prozess ausgeführt wird (s. <process_classes> ) und der Job oder der
Monitor in Java implementiert ist. Die Optionen werden zusammen mit den Optionen aus dem
Kommandozeilenparameter -job-java-options Java übergeben. Wie gleichnamige Optionen interpretiert
werden, hängt von Java ab.
visible="yes|no|never" (Initialwert:yes)
visible="no" und visible="never" lassen den Job im Ergebnis von <show_jobs> und <show_state>
unsichtbar.
Bei visible="no" setzt der JobScheduler den Job sichtbar, sobald eine Task eingereiht wird. Bei
visible="never" ist das nicht der Fall.
ignore_signals="all|signalnames" (Initialwert:no)
Wirksam nur unter Unix.
Software- und Organisations-Service GmbH
August 2014
41
Ein Job, dessen Task-Prozess mit Signal abbricht, führt zum Stopp des Jobs. Ursache eines Signals ist ein
Abbruch der Task durch das System-Kommando kill oder durch einen Programmabbruch.
Wenn ignore_signals nicht angegeben ist, stoppt eine mit Signal abbrechene Task den Job (mit Meldung
SCHEDULER-279 ).
ignore_signals="all" lässt den Job nicht stoppen.
Statt "all" können Sie auch eine Liste von Signalnamen angeben (durch Leerzeichen getrennt). Dabei sind,
abhängig vom Betriebssystem, diese Signalnamen bekannt: SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGTRAP, SIGABRT,
SIGIOT, SIGBUS, SIGFPE, SIGKILL, SIGUSR1, SIGSEGV, SIGUSR2, SIGPIPE, SIGALRM, SIGTERM, SIGSTKFLT, SIGCHLD
, SIGCONT, SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU, SIGURG, SIGXCPU, SIGXFSZ, SIGVTALRM, SIGPROF, SIGWINCH,
SIGPOLL, SIGIO, SIGPWR und SIGSYS. Signal-Namen, die das Betriebsystem nicht kennt, werden mit Warnung
ignoriert.
Weil eine mit einem zu ignorierenden Signal abbrechende Task trotzdem zuerst einen TCP-Verbindungsfehler (
ECONNRESET) hervorruft, führen TCP-Verbindungsfehler nur dann zum Stopp des Jobs, wenn ignore_signals="…"
nicht zutrifft. Der JobScheduler weist mit der Meldung SCHEDULER-974 darauf hin.
Siehe auch <commands on_exit_code="SIGTERM"> (Seite 19) und das Gnu-Kommando man 7 signal.
Beispiel:
<job name="my_job" ignore_signals="SIGTERM SIGKILL">
Meldungen
[warn]
SCHEDULER-279
Process terminated with signal (name) [warn]
SCHEDULER-337
Signal is unknown on this operating system and is ignored [info]
SCHEDULER-974
Last error does not stop the job if the task aborts (after kill or crash) with any
signal listed in ignore_signals="". In this case, expect warning
SCHEDULER-279 stop_on_error="yes|no" (Initialwert:yes)
Die Voreinstellung stop_on_error="yes" stoppt den Job, wenn eine Task mit Exception oder mit einer
Fehlermeldung "[ERROR]" in ihrem Task-Protokoll endet. Eine Fehlermeldung kann z.B. mit Log.error()
geschrieben werden.
stop_on_error="no" lässt den Job in diesen Fällen nicht stoppen. Endet spooler_process() mit Exception,
versetzt der JobScheduler den Auftrag in den Fehlerzustand ( <job_chain_node error_state="…"> ).
Die Einstellung hat keine Wirkung, wenn <delay_after_error> oder Job.delay_after_error verwendet wird.
Meldungen
[warn]
SCHEDULER-846
After task exception and due to stop_on_error='no', the order has been moved
to error_state='' [debug3] SCHEDULER-977
Job is not stopping because of <job stop_on_error="no">. Task error was: [debug3] SCHEDULER-978
Job is stopping because of <job stop_on_error="yes">. Task error was: replace="yes|no" (Initialwert:yes)
Software- und Organisations-Service GmbH
August 2014
42
replace="yes" lässt diese Job-Definition eine evtl. bereits vorhandene ersetzen. Wenn das nicht möglich ist, weil
z.B. gerade eine Task läuft, dann ersetzt der JobScheduler den Job später.
Ein auftragsgesteuerte Job ( <job order="yes"> ) kann nicht ersetzt werden.
warn_if_shorter_than="HH:MM:SS|seconds|percentage%"
Wenn ein Jobschritt vor der angegebenen Zeit beendet wird, gibt der JobScheduler die Warnung SCHEDULER-711
aus.
Die Zeit kann im den Formaten HH:MM, HH:MM:SS, als Sekundenzahl oder als Prozentangabe angegeben werden.
Dabei sind 100% die durchschnittliche Laufzeit der bisherigen Jobschritte, ermittelt aus der Datenbanktabelle
SCHEDULER_HISTORY.
warn_if_longer_than="HH:MM:SS|seconds|percentage%"
Wenn ein Jobschritt länger als die angegebenen Zeit dauert, gibt der JobScheduler die Warnung SCHEDULER-711
aus.
Die Zeit kann im den Formaten HH:MM, HH:MM:SS, als Sekundenzahl oder als Prozentangabe angegeben werden.
Dabei sind 100% die durchschnittliche Laufzeit der bisherigen Jobschritte, ermittelt aus der Datenbanktabelle
SCHEDULER_HISTORY.
enabled="yes|no" (Initialwert:yes) Deaktiviert einen Job.
Mit diesem Attribut kann ein Job deaktiviert werden. Es wirkt so, als ob der Job gestoppt wird. Im Operations GUI
ist er aber vom Stopp-Zustand unterscheidbar.
XML-Element <job_chain>
<job_chain
name
visible
orders_recoverable
distributed
title
max_orders
= "name"
= "yes|no"
= "yes|no"
= "yes|no"
= "String"
= "postive integer"
max. Anzahl parallel laufender
order
>
file_order_source
job_chain_node
file_order_sink
job_chain_node.job_chai
n
job_chain_node.end
</job_chain>
Dateiauftragsquelle
Jobkettenknoten
Dateiauftragssenke
Jobkettenknoten
Ende einer Jobkette
Führt eine neue Jobkette (siehe Klasse Job_chain ) ein.
Siehe Aufträge (Seite 157), Job_chain , Spooler.create_job_chain() und Spooler.add_job_chain()
Einfache Jobkette - Eine Kette von Jobs
Software- und Organisations-Service GmbH
August 2014
43
Einfache Jobketten enthalten Jobs und werden mit den XML-Elementen <job_chain_node> , <
file_order_source> und <file_order_sink> beschrieben.
Übergeordente Jobkette - Eine Kette von Jobketten
Übergeordnete Jobketten verweisen auf andere Jobketten und werden mit den XML-Elementen <
job_chain_node.job_chain> . <job_chain_node.end> beschrieben. Die aufgeführten Jobketten müssen
einfache Jobketten sein.
Übergeordnete Jobketten arbeiten nicht mit verteilten Aufträgen.
Beispiel:
<job_chains>
<job_chain name="Kette_A">
<job_chain_node state=
<job_chain_node state=
"1" job="job_a" next_state=
"2" error_state="999" />
"2" job="job_b" next_state="100" error_state="999" />
<job_chain_node state="100" />
<job_chain_node state="999" />
</job_chain>
</job_chains>
Das ist dasselbe wie folgendes Scheduler-Skript:
<script language="javascript"><![CDATA[
var job_chain = spooler.create_job_chain();
job_chain.name = "Kette_A";
job_chain.add_job( "job_a", 1,
2, 999 );
job_chain.add_job( "job_b", 2, 100, 999 );
job_chain.add_end_state( 100 );
job_chain.add_end_state( 999 );
spooler.add_job_chain( job_chain );
]]></script>
Beispiel:
<job_chains>
<job_chain name="superchain">
<job_chain_node.job_chain state="A" job_chain="job_chain_a"
next_state="B" error_state="ERROR" />
<job_chain_node.job_chain state="B" job_chain="job_chain_b"
next_state="OK" error_state="ERROR" />
<job_chain_node.end state="OK" />
<job_chain_node.end state="ERROR" />
</job_chain>
</job_chains>
Verhalten mit <base>
Das Element darf nicht angegeben werden, wenn es bereits in der Basiskonfiguration steht.
<job_chain name="Name"> mit verschiedenen Namen können hinzugefügt werden.
Eltern Elemente
<job_chains> - Jobketten
Software- und Organisations-Service GmbH
August 2014
44
Attribute
name="name"
Name der Jobkette. Jede Jobkette kann nur einmal definiert werden.
visible="yes|no" (Initialwert:yes)
visible="no" und visible="never" lassen die Jobkette im Ergebnis von <show_job_chains> und <show_state
> unsichtbar.
Bei visible="no" setzt der JobScheduler die Jobkette sichtbar, sobald eine Task eingereiht wird. Bei
visible="never" ist das nicht der Fall.
orders_recoverable="yes|no" (Initialwert:yes)
orders_recoverable="yes"
Der JobScheduler hält die Aufträge in der Datenbank. Sobald ein Auftrag in die Auftragswarteschlange eines Jobs
eingereiht wird, speichert der JobScheduler ihn auch in der Datenbank. Wenn der Auftrag die Jobkette durchlaufen
hat, wird er aus der Datenbank entfernt.
Beim Einrichten der Jobkette (beim Start des Schedulers) lädt der JobScheduler die Aufträge aus der Datenbank.
Siehe Spooler.add_job_chain() .
Wirkungslos, wenn der JobScheduler ohne Datenbank arbeitet, siehe factory.ini (Abschnitt [spooler], Eintrag
db= …) (Seite 87).
orders_recoverable="no"
Der JobScheduler hält nicht die Aufträge in der Datenbank und lädt sie auch nicht daraus.
Siehe Datenbank (Seite 130).
distributed="yes|no" (Initialwert:no)
Wirkt nur mit der Kommandozeilenoption -distributed-orders und lässt die Aufträge von mehreren Schedulern
verteilt ausführen.
distributed="no" lässt die Jobkette nicht verteilt, sondern nur auf diesem JobScheduler ausführen, wie bei
einem nicht-verteiltem Scheduler. Der Name der Jobkette muss in diesem Fall im Cluster eindeutig sein (das wird
nicht geprüft).
title="String"
Der Jobkette kann ein Titel gegeben werden.
Siehe auch Job_chain.title .
max_orders="postive integer" max. Anzahl parallel laufender order
Grundsätzlich können von einer Jobkette beliebig viele Instanzen (durch verschiedene Order gestartet) parallel
laufen. Mit max_orders kann diese Anzahl begrenzt werden. max_orders='1' bedeutet z.B., dass eine order diese
Software- und Organisations-Service GmbH
August 2014
45
Jobkette exklusiv für sich beansprucht. Eine weitere order für diese Jobkette können erst ausgeführt werden, wenn
die erste order beendet worden ist.
Fehlt diese Angabe, ist die Anzahl der parallel laufenden Order einer Jobkette nicht begrenzt.
Diese Einstellung gilt nur für order, die mit dem ersten Knoten der Jobkette starten.
XML-Element <job_chain_node>
<job_chain_node
state
job
next_state
error_state
delay
on_error
> </job_chain_node>
= "string"
= "job_name"
= "string"
= "string"
= "seconds"
= "suspend|resume"
Fügt einer Jobkette einen neuen Jobkettenknoten hinzu (siehe Klasse Job_chain_node ).
Die XML-Elemente
<job_chain_node state="STATE"
job="JOB" next_state="NEXT_STATE"
error_state="ERROR_STATE"/>
<job_chain_node state="ERROR_STATE" />
entsprechen den API-Aufrufen
job_chain.add_job( "JOB", "STATE", "NEXT_STATE", "ERROR_STATE" );
job_chain.add_end_state( "ERROR_STATE" );
Siehe Job_chain_node , Job_chain.add_job() und Job_chain.add_end_state() .
Eltern Elemente
<job_chain> - Jobkette
Attribute
state="string"
Zustand, für den dieser Jobkettenknoten gilt.
job="job_name"
Job, der aufgerufen werden soll, wenn ein Auftrag den Zustand erreicht.
Wenn der Zustand einen Endzustand ist, dann geben Sie dieses Attribut nicht an.
Beispiel:
<job_chain_node state="1" job="my_job"/>
<job_chain_node state="2" job="../job_in_parent_folder"/>
next_state="string"
Software- und Organisations-Service GmbH
August 2014
46
spooler_process() des Jobs mit return true versetzt einen Auftrag in diesen Folgezustand.
Voreingestellt ist der Wert des Attributes state= des folgenden <job_chain_node>.
error_state="string"
spooler_process() des Jobs mit return false versetzt einen Auftrag in diesen Fehlerzustand.
delay="seconds" (Initialwert:0)
Verzögert den Auftrag vor Übergabe an den Job.
on_error="suspend|resume"
Nach einem Auftragsschritt, der den Auftrag als fehlerhaft gekennzeichnet hat, versetzt der JobScheduler den
Auftrag in den Fehlerzustand error_state. Das kann mit diesem Attribut geändert werden.
on_error="suspend" wirkt wie Order.suspended =true: Der JobScheduler belässt den Auftrag in seinem
Zustand, er bleibt also vor dem Job stehen und wird suspendiert.
on_error="setback" wirkt wie Order.setback() : Der JobScheduler belässt den Auftrag in seinem Zustand, er
bleibt also vor dem Job stehen, so wie es im Job mit <delay_order_after_setback> eingestellt ist.
XML-Element <job_chain_node.end>
<job_chain_node.end
state
> </job_chain_node.end>
= "string"
Endzustand
Fügt einer Kette von Jobketten einen Endzustand hinzu.
Eltern Elemente
<job_chain> - Jobkette
Attribute
state="string" Endzustand
Zustand, für den dieser Jobkettenknoten gilt.
XML-Element <job_chain_node.job_chain>
<job_chain_node.job_chain
state
= "string"
job_chain
= "job_chain_name"
next_state
= "string"
error_state
= "string"
> </job_chain_node.job_chain>
Fügt einer Kette von Jobketten einen neuen Jobkettenknoten hinzu, der eine verschachtelte Jobkette bezeichnet.
Software- und Organisations-Service GmbH
August 2014
47
Jobketten, die verschachtelte Jobketten enthalten, können selbst nicht in anderen Jobketten als verschachtelte
Jobketten verwendet werden.
Miteinander durch Verschachtelung verbundene Jobkettenn bilden einen gemeinsamen Order_id_space, um beim
Einfügen eines Auftrags die Eindeutigkeit der Auftragskennung sicherstellen zu können.
Der JobScheduler lehnt das Einfügen eines Auftrags in eine Jobkette ab, wenn die Auftragskennung im
Order_id_space bereits vergeben ist.
Beim Ersetzen eines Auftrags wird auch ein Auftrag in einer anderen Jobkette, die demselben Order_id_space
angehört, ersetzt.
Eltern Elemente
<job_chain> - Jobkette
Attribute
state="string"
Zustand, für den dieser Jobkettenknoten gilt.
job_chain="job_chain_name"
Jobkette, der der Auftrag übergeben werden soll, wenn er den Zustand erreicht.
next_state="string"
spooler_process() mit return true des zuletzt durchlaufenden Jobs versetzt einen Auftrag in diesen
Folgezustand.
Voreingestellt ist der Wert des Attributes state= des folgenden Jobkettenknotens.
error_state="string"
spooler_process() mit return false des zuletzt durchlaufenden Jobs versetzt einen Auftrag in diesen
Fehlerzustand.
XML-Element <job_chains>
<job_chains >
job_chain
</job_chains>
Jobkette
Beispiel:
Siehe <job_chain> (Seite 42).
Verhalten mit <base>
Ergänzt ein Element <job_chains> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Software- und Organisations-Service GmbH
August 2014
48
Eltern Elemente
<config> - Konfiguration
XML-Element <jobs>
<jobs >
job
</jobs>
Definition eines Jobs
Verhalten mit <base>
Ergänzt ein Element <jobs> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene Attribute
überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<config> - Konfiguration
XML-Element <lock>
<lock
name
max_non_exclusive
= "name"
= "integer"
Name der Sperre
Begrenzung der
Belegungen
nicht-exklusiven
> </lock>
Mit einer Sperre kann verhindert werden, dass zwei Tasks gleichzeitig laufen.
Siehe (Seite 152).
Zur Verwendung einer Sperre siehe <lock.use> (Seite 49)
Siehe auch <lock.remove> (Seite 186), Lock .
Beispiel:
<locks>
<lock name="switching_database"/>
<lock name="only_three_tasks" max_non_exclusive="3"/>
</locks>
Verhalten mit <base>
Ergänzt ein Element <lock> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene Attribute
überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<locks> - Deklaration der Sperren
Attribute
Software- und Organisations-Service GmbH
August 2014
49
name="name" Name der Sperre
Siehe auch Lock.name .
max_non_exclusive="integer" Begrenzung der nicht-exklusiven Belegungen
Die Voreinstellung ist unbegrenzt, es können also mit <lock.use exclusive="no"> beliebig viele nicht-exklusive
Tasks gestartet werden (aber nur eine exklusive).
Siehe auch Lock.max_non_exclusive .
Meldungen
[warn]
SCHEDULER-887
More lock holders than new max_non_exclusive=: holders XML-Element <lock.use>
<lock.use
lock
exclusive
= "name"
= "yes|no"
Name der Sperre
Exklusive oder nicht-exklusive Belegung ist
möglich
> </lock.use>
Siehe auch <locks> (Seite 50) und <lock> (Seite 48).
Beispiel:
<locks>
<lock name="my_file"/>
</lock>
<job name="my_file_reader" tasks="3">
<lock.use lock="my_file" exclusive="no"/>
…
</job>
<job name="my_other_file_reader">
<lock.use lock="my_file" exclusive="no"/>
…
</job>
<job name="my_file_writer">
<lock.use lock="my_file"/>
…
</job>
Die Jobs my_file_reader und my_other_file_reads belegen die Sperre nicht-exklusiv und können gleichzeitig
mit mehreren Tasks laufen.
Der Job my_file_writer setzt die Sperre exklusiv und startet nur, wenn kein anderer Job läuft. Der Job kann einen
Datenbestand ändern und sich darauf verlassen, dass währenddessen keiner der beiden anderen Jobs den
Datenbestand liest.
Siehe auch Task.try_hold_lock() .
Software- und Organisations-Service GmbH
August 2014
50
Verhalten mit <base>
Ergänzt ein Element <lock.use> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<job> - Definition eines Jobs
Attribute
lock="name" Name der Sperre
Die Sperre muss mit <lock> deklariert worden sein.
exclusive="yes|no" (Initialwert:yes) Exklusive oder nicht-exklusive Belegung ist möglich
exclusive="yes" ist voreingestellt. Damit wird die Sperre exklusiv gesetzt und nur eine Task wird gestartet. Alle
anderen Jobs, die dieselbe Sperre angegeben, werden in eine Warteschlange eingereiht. Jobs mit
exclusive="yes" werden vor Jobs mit exclusive="no" gestartet.
exclusive="no" sperrt nur gegen exklusive Verwendung (exclusive="yes"). Task mit exclusive="no"
schließen nur Tasks mit exclusive="yes" aus. Die Zahl von mit exclusive="no" insgesamt laufender Tasks kann
mit <lock max_non_exclusive="…"> begrenzt werden.
XML-Element <locks>
<locks >
lock
</locks>
Deklaration einer Sperre
Verhalten mit <base>
Ergänzt ein Element <locks> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene Attribute
überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<config> - Konfiguration
XML-Element <monitor>
<monitor
name
ordering
>
script
</monitor>
= "Name"
= "Number"
Programm-Code
Ein Monitor stellt Funktionen bereit, die vor und nach der Task sowie vor und nach von spooler_process()
gerufen werden.
Software- und Organisations-Service GmbH
August 2014
51
Der Monitor kann den Start der Task oder die Ausführung von spooler_process() verhindern.
Siehe Oberklasse Monitor_impl , deren Methoden ein Monitor implementieren kann.
Beispiel:
<monitor>
<script java_class="spooler_job.Java_monitor"><![CDATA[
package spooler_job;
import sos.spooler.*;
public class Java_monitor extends sos.spooler.Monitor_impl
{
public boolean spooler_task_before() throws Exception
{
spooler_log.info( "SPOOLER_TASK_BEFORE()" );
return true;
}
public void spooler_task_after() throws Exception
{
spooler_log.info( "SPOOLER_TASK_AFTER()" );
}
public boolean spooler_process_before() throws Exception
{
spooler_log.info( "SPOOLER_PROCESS_BEFORE()" );
return true;
}
public boolean spooler_process_after( boolean spooler_process_result )
throws Exception
{
spooler_log.info( "SPOOLER_PROCESS_AFTER(" + spooler_process_result +
")" );
return spooler_process_result;
}
}
]]></script>
</monitor>
Verhalten mit <base>
Das Element darf nicht angegeben werden, wenn es bereits in der Basiskonfiguration steht.
Eltern Elemente
<job> - Definition eines Jobs
Attribute
name="Name"
Mehrere Monitor können angegeben werden, wenn sie unterschiedliche Namen erhalten.
Die Monitor werden in der Reihenfolge des Attributes ordering aufgerufen. spooler_process_after() und
spooler_task_after() in der rückwärtigen Reihenfolge.
Software- und Organisations-Service GmbH
August 2014
52
ordering="Number"
Gibt die Rangfolge der Monitore an.
XML-Element <month>
<month
month
>
period
monthdays
ultimos
weekdays
</month>
= "month"
Periode
Perioden für bestimmte Tage des Monats
Perioden für bestimmte Tage des Monats, vom Ende her gezählt
Perioden für bestimmte Wochentage
Setzt die Perioden für einen bestimmten Tag des Monats fest.
Im Gegensatz zu anderen Elementen übernimmt <month> nicht die Attribute von <run_time> oder die darin
voreingestellten <period> .
Wenn <month> für einen Monat gilt, dann gelten solange nicht die direkt unter <run_time> stehenden <weekdays>
, <monthdays> oder <ultimos> .
Eltern Elemente
<run_time> - Laufzeiten
Attribute
month="month"
Eine oder mehrere, durch Leerzeichen getrennte Monatsnamen: "january", "february", "march", "april",
"may", "june", "july", "august", "september", "october", "november", "december".
XML-Element <monthdays>
<monthdays >
day
weekday
</monthdays>
Perioden für bestimmte Tage
Perioden für einen bestimmten Wochentag
Setzt die Perioden für einen bestimmten Tag des Monats fest.
Software- und Organisations-Service GmbH
August 2014
53
Beispiel:
<monthdays>
<day day="1">
<period begin="10:00" end="12:00"/>
</day>
<day day="2">
<period begin="08:00" end="12:00"/>
<period begin="15:00" end="18:00"/>
</day>
<weekday day="monday" which="1">
<period single_start="02:00"/>
</weekday>
</monthdays>
Setzt die Laufzeiten fest für den Ersten eines Monats 10:00 bis 12:00 und für den Zweiten eines Monats 08:00 bis
12:00 und 15:00 bis 18:00. Außerdem wird der Job am jeweils ersten Montag eines Monats um 2 Uhr morgens
gestartet.
Beispiel:
<monthdays>
<day day="5">
<period single_start="16:00"/>
</day>
</monthdays>
Startet den Job an jedem 5. eines Monats um 16 Uhr.
Verhalten mit <base>
Ergänzt ein Element <monthdays> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<run_time> - Laufzeiten
XML-Element <param>
<param
name
value
> </param>
= ""
= ""
Eindeutiger Name
Siehe <params> (Seite 54).
Bestimmt einen einzelnen Parameter für den Scheduler, einen Job oder einen Auftrag. Grundsätzlich sind alle
Parameter über die API Aufrufe Spooler.variables() , Task.params() bzw. Order.payload() oder in shell Jobs
als environment Variable (mit vorangestelltem SCHEDULER_PARAM_) verfügbar.
Gleichnamige Parameter in der JobScheduler Konfiguration, am Job und am Auftrag gelten in der folgenden
Reihenfolge:
•
Auftrag
•
Job
•
Scheduler
Software- und Organisations-Service GmbH
August 2014
54
Es wird empfohlen keine eigenen Parameter einzustellen, die mit der Zeichenfolge scheduler. beginnen, da dieser
Namensraum für Konfigurationseinstellungen des JobScheduler reserviert ist.
Die Parameter können zur Laufzeit überschrieben und erweitert werden.
Siehe auch die Klasse Variable_set .
Scheduler-Parameter
Folgende Scheduler-Parameter könnnen für die Konfiguration des JobScheduler verwendet werden:
•
scheduler.variable_name_prefix
•
scheduler.max_kbyte_of_db_log_entry
•
scheduler.order.keep_order_content_on_reschedule
•
scheduler.order.distributed.balanced
Job-Parameter
Job-Parameter können mit der Methode Task.params() abgerufen werden.
Auftrags-Parameter
Parameter eines Auftrags können mit der Methode Order.params() abgerufen werden.
Verhalten mit <base>
Ergänzt ein Element <param> an der entsprechenden Stelle mit gleichem Attribut name= aus der Basiskonfiguration.
Hier angegebene Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<params> - Parameter
Attribute
name="" Eindeutiger Name
value=""
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
XML-Element <params>
<params >
param
copy_params
include
</params>
Ein Parameter
Parameter übernehmen
Fügt Text aus einer Datei ein
Bestimmt Parameter für den Scheduler, einen Job oder einen Auftrag. Die Parameter können zur Laufzeit
überschrieben und erweitert werden.
Scheduler-Parameter können mit der Methode Spooler.variables() abgerufen werden.
Job-Parameter können mit der Methode Task.params() abgerufen werden.
Software- und Organisations-Service GmbH
August 2014
55
Parameter eines Auftrags können mit der Methode Order.payload() abgerufen werden.
Siehe auch die Klasse Variable_set und <sos.spooler.variable_set> (Seite 69).
Verhalten mit <base>
Ergänzt ein Element <params> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<job> - Definition eines Jobs
<add_order> - Auftrag hinzufügen
<config> - Konfiguration
<modify_order> <payload> <queued_task> <web_service> - Web-Dienst
XML-Element <period>
<period
begin
end
repeat
absolute_repeat
single_start
let_run
when_holiday
= "hh:mm[:ss]"
= "hh:mm[:ss]"
= "hh:mm[:ss] oder sekunden"
= "hh:mm[:ss] | seconds"
= "hh:mm[:ss]"
= "yes_no"
= ""
Umgang
Feiertagen
mit
> </period>
Eine Periode gibt an, wann ein Job laufen darf. Sie kann einen Zeitraum innerhalb eines Tages umfassen (Attribute
begin und end) oder einen Zeitpunkt (Attribut single_start).
Eltern Elemente
<run_time> - Laufzeiten
Attribute
begin="hh:mm[:ss]" (Initialwert:00:00)
Ab dieser Uhrzeit darf der Job laufen.
end="hh:mm[:ss]" (Initialwert:24:00)
Um diese Zeit endet die Periode. Wenn dann let_run="no" gesetzt ist und keine weitere Periode gilt, beendet der
JobScheduler laufende Tasks (durch Aufruf von spooler_close()).
repeat="hh:mm[:ss] oder sekunden"
Software- und Organisations-Service GmbH
August 2014
56
Der Job wird, wenn er nicht schon läuft, zu Beginn der Periode gestartet. Nach Jobende soll der JobScheduler den
Job nach ablauf der angegebenen Zeit erneut starten, soweit die <run_time> das zulässt. Die Wiederholung kann
im Format hh:mm oder hh:mm:ss oder in Sekunden angegeben werden.
Kann nicht mit dem Attribut single_start= kombiniert werden.
Bei repeat="0" wird der Job nicht wiederholt (default).
absolute_repeat="hh:mm[:ss] | seconds"
Der Job wird, wenn er nicht schon läuft, zu Beginn der Periode gestartet. Danach wird er zu den Zeitpunkten
gestartet, die sich aus den Vielfachen von absolute_repeat nach begin errechnen. Die Wiederholung kann im
Format hh:mm oder hh:mm:ss oder in Sekunden angegeben werden.
Kann nicht mit dem Attribut single_start= kombiniert werden.
single_start="hh:mm[:ss]"
Der Job soll zu der angegebenen Uhrzeit starten.
Nicht zusammen mit den Attributen begin=, end= und repeat= zu verwenden.
let_run="yes_no"
Das Attribut kann nur für Jobs, nicht für Aufträge angegeben werden. Für auftragsgesteuerte Jobs sollte Einstellung
let_run="no" eingestellt werden.
let_run="yes" gibt an, dass der JobScheduler die Task weiterlaufen lassen soll, auch wenn die <run_time> das
eigentlich nicht mehr zulässt.
Bei let_run="no" beendet der JobScheduler die Task (ruft also nicht mehr spooler_process, sondern
spooler_close auf), sobald die <run_time> nicht mehr gilt.
when_holiday="" Umgang mit Feiertagen
Normalerweise wird eine Periode, die auf einen Feiertag <holidays> fällt, unterdrückt. Aber es gibt noch weitere
Möglichkeiten.
when_holiday="suppress"
Voreinstellung. Wenn die Periode auf einen Feiertag fällt, wird sie unterdrückt.
when_holiday="ignore_holiday"
Wenn die Periode auf einen Feiertag fällt, wird sie nicht unterdrückt.
when_holiday="previous_non_holiday"
Wenn die Periode auf einen Feiertag fällt, wird sie auf den vorangehenden Nicht-Feiertag verschoben.
when_holiday="next_non_holiday"
Wenn die Periode auf einen Feiertag fällt, wird sie auf den nachfolgenden Nicht-Feiertag verschoben.
Software- und Organisations-Service GmbH
August 2014
57
XML-Element <process>
<process
file
= "filename"
param
log_file
ignore_error
ignore_signal
= "text"
= "dateiname"
= "yes|no"
= "yes|no"
Pfad
des
Programms
Parameterzeile
auszuführenden
>
environment
</process>
Umgebungsvariablen
Beim Start des Jobs, also zu Beginn einer Task, wird ein Prozess eingerichtet. Der JobScheduler überwacht den
Prozess und beendet die Task nachdem der Prozess sich beendet hat.
Exit-Code
•
•
Ein Exit-Code verschieden von 0 wird als Fehler ( SCHEDULER-280 ) interpretiert.
Unter Unix setzt der JobScheduler den Exit-Codes eines mit Signal abgebrochenen Prozesses auf den
negativen Wert des Signals.
•
Der Exit-Code wird in Task.exit_code bereitgestellt und entscheidet über die anschließend auszuführenden
Kommandos. Siehe hierzu <job> <commands on_exit_code="…"> .
Umgebungsvariablen
Der JobScheduler übergibt Umgebungsvariablen:
SCHEDULER_CONFIGURATION_DIRECTORY
Dasselbe wie Spooler.configuration_directory .
SCHEDULER_HOST
Dasselbe wie Spooler.hostname .
SCHEDULER_JOB_CHAIN
Bei einem auftragsgesteuerten Job ( <job order="yes"> ) Task.order . Order.job_chain .
Job_chain.name .
SCHEDULER_JOB_CHAIN_CONFIGURATION_DIRECTORY
Pfad des Konfigurationsverzeichnisses der Jobkette; "", wenn die Jobkette nicht aus einem
Konfigurationsverzeichnis stammt oder kein Auftrag vorliegt
SCHEDULER_JOB_CONFIGURATION_DIRECTORY
Dasselbe wie Job.configuration_directory .
SCHEDULER_JOB_NAME
Der Name des Jobs
SCHEDULER_ORDER_ID
Bei einem auftragsgesteuerten Job ( <job order="yes"> ) Task.order . Order.id .
SCHEDULER_SUPERVISOR_HOST
Rechnername aus <config supervisor="…">
SCHEDULER_SUPERVISOR_PORT
Portnummer aus <config supervisor="…">
Software- und Organisations-Service GmbH
August 2014
58
SCHEDULER_TASK_ID
Dassselbe wie Task.id .
SCHEDULER_TASK_TRIGGER_FILES
Dasselbe wie Task.trigger_files .
SCHEDULER_TCP_PORT
Wie Spooler.tcp_port oder leer, wenn kein Port festgelegt ist.
SCHEDULER_UDP_PORT
Wie Spooler.udp_port oder leer, wenn kein Port festgelegt ist.
Verhalten mit <base>
Das Element darf nicht angegeben werden, wenn es bereits in der Basiskonfiguration steht.
Eltern Elemente
<job> - Definition eines Jobs
Attribute
file="filename" Pfad des auszuführenden Programms
Name der Datei, die das Programm oder das Skript enthält, mit dem der Prozess gestartet werden soll. Die Datei
muss vom Betriebssystem ausführbar sein.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
param="text" Parameterzeile
Gibt den Parameterstring an, der dem Prozess übergeben wird. Außer den Umgebungsvariablen werden können
auch die Task-Parameter mit $ name oder ${ name } abgerufen werden.
Die in <environment> aufgeführten Variablen haben keinen Einfluss auf die Ersetzung.
Beispiel:
<process file="/tmp/test.cmd" param="EINS=$EINS ZWEI=$ZWEI HOME=$HOME LOG=$LOG
PATH=$PATH">
<environment>
<variable name="PATH" value="$PATH;/extra"/>
<!-- not used for param="" -->
</environment>
</process>
var params = spooler.create_variable_set();
params.value( "EINS" ) = "1";
params.value( "ZWEI" ) = "2";
spooler.job( "process" ).start( params );
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
log_file="dateiname"
Software- und Organisations-Service GmbH
August 2014
59
Der JobScheduler übernimmt nach Prozessende den Inhalt dieser Datei in sein Protokoll.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
ignore_error="yes|no" (Initialwert:no)
Bei ignore_error="no" (Voreinstellung) führt ein Exit code ≠ 0 zu einem Jobfehler. Der Job wird gestoppt.
Bei ignore_error="yes" führt ein Exit code ≠ 0 nicht zu einem Jobfehler.
ignore_signal="yes|no" (Initialwert:no)
Wirkt nur unter Unix. (Unter Windows liefert ein abgebrochener Prozess einen Exit code, der von
ignore_error="" berücksichtigt wird.)
Bei ignore_signal="no" (Voreinstellung) führt ein Signal (d.h. ein Abbruch des Prozesses, z.B. durch kill) zu
einem Jobfehler. Der Job wird gestoppt.
Bei ignore_signal="yes" führt ein Signal nicht zu einem Jobfehler.
ignore_signal="yes" hat dieselbe Wirkung wie <job ignore_signals="all"> .
XML-Element <process_class>
<process_class
spooler_id
name
max_processes
remote_scheduler
replace
> </process_class>
= "scheduler_id"
= "name"
= "zahl"
= "host:port"
Ausführung der Tasks auf entferntem
Rechner
= "yes|no"
Definiert oder ändert eine Prozessklasse.
Siehe auch <process_class.remove> (Seite 195).
Verhalten mit <base>
Ergänzt ein Element <process_class> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<process_classes> - Prozessklassen
Attribute
spooler_id="scheduler_id"
Das Element ist nur wirksam, wenn dieses Attribut leer oder gleich dem Parameter -id= vom JobScheduler Start
ist, oder wenn beim JobScheduler Start die Option -id nicht angegeben worden ist.
name="name"
Software- und Organisations-Service GmbH
August 2014
60
Name der Prozessklasse. Wenn das Attribut fehlt oder leer ("") ist, dann wird die Default-Prozessklasse geändert.
Siehe <job> (Seite 37), Attribut process_class=.
max_processes="zahl" (Initialwert:30)
Begrenzt die Zahl der Prozesse.
Manche Betriebsysteme limitieren die Zahl der Prozesse, die der JobScheduler starten darf. Es sollten nicht mehr
Prozesse konfiguriert werden als das Betriebssystem erlaubt.
Für Microsoft Windows Betriebssysteme gilt derzeit eine Beschränkung von max. 30 für die parallele Ausführung
zugelassenen Prozessen.
remote_scheduler="host:port" Ausführung der Tasks auf entferntem Rechner
Bestimmt den entfernten Scheduler, auf dem die Tasks dieser Prozessklasse ausgeführt werden sollen, durch
Hostnamen oder IP-Nummer und TCP-Port (s. <config tcp_port="…"> ).
Der entfernte JobScheduler muss den Zugriff mit <allowed_host level="all"> erlauben.
Die ausgeführten Tasks kommunizieren über die API mit dem steuernden Scheduler. Dabei gibt es einige
Besonderheiten:
•
•
•
<include> innerhalb von <script> wird vom Task-Prozess ausgeführt. Die einzuschließende Datei wird also
vom Rechner, der die Task ausführt, gelesen.
Subprocess.timeout und Task.add_pid() wirken nicht. Der JobScheduler kann entfernte Subprozesse,
deren Frist abgelaufen ist, nicht abbrechen.
Log.log_file() wird, wie fast alle Methoden, auf dem Rechner des Schedulers ausgeführt, greift also auf
die Dateien des dortigen Dateisystems zu.
Einige Einstellungen werden vom entfernten statt vom eigenen JobScheduler übernommen:
•
•
•
•
•
sos.ini (Abschnitt [java], Eintrag javac= …)
factory.ini (Abschnitt [spooler], Eintrag tmp= …)
<config java_options="…">
<config java_class_path="…">
<config include_path="…">
Meldungen
[warn]
SCHEDULER-849
Timeout is not possible for a subprocess running on a remote host (it cannot be
killed), pid= [warn]
SCHEDULER-850
After lost connection to remote scheduler, process is going to be killed [info]
SCHEDULER-848
Task pid= started for remote scheduler replace="yes|no" (Initialwert:yes)
replace="yes" ersetzt die vorhandene Prozessklasse.
replace="no" ändert nur die gesetzten Attribute der Prozessklasse.
Software- und Organisations-Service GmbH
August 2014
61
XML-Element <process_classes>
<process_classes
ignore
>
process_class
</process_classes>
= "yes|no"
Prozessklasse
Verhalten mit <base>
Ergänzt ein Element <process_classes> an der entsprechenden Stelle aus der Basiskonfiguration. Hier
angegebene Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<config> - Konfiguration
Attribute
ignore="yes|no" (Initialwert:no)
ignore="yes" unterdrückt den Betrieb mit Prozessklassen, d.h. die Tasks laufen im Prozess des Schedulers, was
nur zum Debuggen geeignet ist.
XML-Element <run_time>
<run_time
time_zone
schedule
start_time_function
once
begin
end
repeat
single_start
let_run
when_holiday
= "text"
= ""
= "name"
= "yes_no"
= "hh:mm[:ss]"
= "hh:mm[:ss]"
= "hh:mm[:ss] oder sekunden"
= "hh:mm[:ss]"
= "yes_no"
= ""
Zeitzone des Auftrages / des Jobs
/ des Schedules
Abzurufender Zeitplan
>
period
at
date
weekdays
month
monthdays
ultimos
holidays
</run_time>
Periode
Startzeitpunkt
Perioden für ein bestimmtes Datum
Perioden für bestimmte Wochentage
Perioden für einen Monat
Perioden für bestimmte Tage des Monats
Perioden für bestimmte Tage des Monats, vom Ende her gezählt
Feiertage
<run_time> gibt an, zu welchen Zeiten der JobScheduler Tasks dieses Jobs laufen lässt. Das wird realisiert durch
Perioden (s. <period> ). Der JobScheduler wählt die erste Periode aus, die zu einer Zeit gilt (deren Ende noch
nicht abgelaufen ist). Diese Periode gilt bis zu ihrem Ende. Dann wählt der JobScheduler erneut eine Periode aus.
Software- und Organisations-Service GmbH
August 2014
62
Eine Periode mit single_start gilt nur für einen Zeitpunkt.
<show_calendar> zeigt das Ergebnis.
Sommer- und Winterzeit
Der JobScheduler berücksichtigt die Zeitumstellung zu Beginn und Ende der Sommerzeit. Es gilt stets die lokale
Zeit. Ein Job, der eine Startzeit zwischen 2 und 3 Uhr hat, kann zum Ende der Sommerzeit zweimal gestartet werden.
Verkürzte Schreibweise mit <period> und den Attributen begin=, end=, repeat=, let_run=, single_start= und
when_holiday=
<period> innerhalb von <run_time> werden verwendet für die Elemente <date> , <weekdays> , <monthdays> und
<ultimos> , wenn diese keine eigenen <period> haben. Ausgenommen ist also <month> .
<run_time>
<period begin="07:00" end="09:00"/>
<monthdays>
<day day="1"/>
<day day="2">
<period begin="22:00" end="23:00"/>
</day>
</monthdays>
</run_time>
wird zu
<run_time>
<monthdays>
<day day="1">
<period begin="07:00" end="09:00"/>
</day>
<day day="2">
<period begin="22:00" end="23:00"/>
</day>
</monthdays>
</run_time>
Wenn dagegen keins der Elemente <date> , <weekdays> , <monthdays> und <ultimos> aufgeführt ist, gelten die <
period> für jeden Tag der Woche.
Die Attribute begin=, end=, repeat=, let_run= und single_start= wirken, wenn kein <period> angegeben ist,
und lassen den JobScheduler eins mit denselben Attributen erzeugen.
<run_time begin="07:00" end="09:00"/>
wird zu
<run_time>
<period begin="07:00" end="09:00"/>
<run_time>
Software- und Organisations-Service GmbH
August 2014
63
Beispiel:
<run_time/>
ist, wegen der Voreinstellungen für begin= und end=, dasselbe wie
<run_time begin="00:00" end="24:00"/>
ist, weil <run_time> leer ist, dasselbe wie
<run_time>
<period begin="00:00" end="24:00"/>
</run_time>
also eine Periode für jeden Tag rund um die Uhr. Der Job kann immer laufen.
Eltern Elemente
<job> - Definition eines Jobs
<add_order> - Auftrag hinzufügen
<order> Attribute
time_zone="text" Zeitzone des Auftrages / des Jobs / des Schedules
Überschreibt die globale Einstellung der Zeitzone für ein JobScheduler Objekt (Auftrag, Job, Schedule).
Siehe <config time_zone="…"> (Seite 20).
schedule="" Abzurufender Zeitplan
Gibt den benannten <schedule> an, der verwendet werden soll.
Alle anderen Attribute und Kindelement werden nicht beachtet.
start_time_function="name"
Gibt gibt den Namen einer Funktion im Scheduler-Skript an, die die nächste Startzeit liefert.
Der JobScheduler übergibt der Funktion im ersten Parameter den Zeitpunkt, ab dem sie eine Startzeit liefern soll,
als Zeichenkette im Format "yyyy-mm-dd HH:MM:SS".
Im zweiten Parameter erhält die Funktion den Jobnamen bzw. die Auftragskennung.
Rückgabe der Funktion ist ein Zeitpunkt, der nicht vor dem ersten Parameter liegen darf, oder nichts (d.h. "" oder
Empty). Der JobScheduler erwartet als Rückgabe eine Zeichenkette im Format "yyyy-mm-dd hh:mm:ss".
Meldungen
[ERROR]
SCHEDULER-393
Error when calling <run_time> function '': [warn]
SCHEDULER-394
<run_time>-Function '' returned start time which is earlier than the requested
beginning once="yes_no" (Initialwert:no)
Software- und Organisations-Service GmbH
August 2014
64
Bei once="yes" startet der Scheduler den Job einmal nach Start des Schedulers, sobald die <run_time> dies
zulässt. Außerdem werden persistente Jobs mit once="yes" sofort gestartet, wenn sie während der Laufzeit des
JobSchedulers zu einem Live-Folder hinzugefügt werden und ihre <run_time> dies zulässt.
begin="hh:mm[:ss]" (Initialwert:00:00)
Wenn das Element leer ist (also kein <period> enthält), generiert der JobScheduler eine Periode mit dieser
Einstellung, andernfalls ist es die Voreinstellung für die Kind-Elemente (siehe oben Verkürzte Schreibweise (Seite
62)).
end="hh:mm[:ss]" (Initialwert:24:00)
Wenn das Element leer ist (also kein <period> enthält), generiert der JobScheduler eine Periode mit dieser
Einstellung, andernfalls ist es die Voreinstellung für die Kind-Elemente (siehe oben Verkürzte Schreibweise (Seite
62)).
repeat="hh:mm[:ss] oder sekunden"
Wenn das Element leer ist (also kein <period> enthält), generiert der JobScheduler eine Periode mit dieser
Einstellung, andernfalls ist es die Voreinstellung für die Kind-Elemente (siehe oben Verkürzte Schreibweise (Seite
62)).
single_start="hh:mm[:ss]"
Wenn das Element leer ist (also kein <period> enthält), generiert der JobScheduler eine Periode mit dieser
Einstellung, andernfalls ist es die Voreinstellung für die Kind-Elemente (siehe oben Verkürzte Schreibweise (Seite
62)).
let_run="yes_no"
Hiermit wird bestimmt, ob ein laufender Task nach Ablauf einer Periode weitere Process-Schritte ausführen soll
oder nicht. Per Default führt ein Job keine weiteren Process-Schritte mit Ablauf der Periode aus und wird beendet
(let_run="no").
Für auftragsgesteuerte Jobs gilt:
Wenn ein auftragsgesteuerter Job eine Periode definiert (z.B. 12:00 - 14:00) und während dieser Periode ein
Auftrag eintrifft, wird der Auftrag ausgeführt. Nach Beendigung der Ausführung entscheidet der Wert für
idle_timeout, ob die Task gestartet bleibt und mögliche weitere Aufträge entgegennimmt. Wenn die Task gestartet
bleibt und einen Auftrag entgegennimmt, wird der Wert für let_run geprüft.
let_run="yes": Der Auftrag wird ausgeführt.
let_run="no": Der Auftrag wird nur ausgeführt, wenn der Startzeitpunkt innerhalb der Periode des Jobs liegt.
Wenn das Element leer ist (also kein <period> enthält), generiert der JobScheduler eine Periode mit dieser
Einstellung, andernfalls ist es die Voreinstellung für die Kind-Elemente (siehe oben Verkürzte Schreibweise (Seite
62)).
when_holiday=""
Software- und Organisations-Service GmbH
August 2014
65
Wenn das Element leer ist (also kein <period> enthält), generiert der JobScheduler eine Periode mit dieser
Einstellung, andernfalls ist es die Voreinstellung für die Kind-Elemente (siehe oben Verkürzte Schreibweise (Seite
62)).
XML-Element <schedule>
<schedule
name
substitute
= "name"
= "schedule_path"
valid_from
valid_to
> </schedule>
Zeitweilig
Zeitplan
zu
überdeckender
= "yyyy-mm-dd HH:MM[:ss]"
= "yyyy-mm-dd HH:MM[:ss]"
Außer den hier beschriebenen Attributen und Elementen können die von <run_time> angegeben werden, aber
nicht schedule=.
Bei verteilten Aufträgen wirkt die Änderung eines <schedule> erst, wenn der Auftrag das nächste Mal die Jobkette
durchlaufen hat.
Eltern Elemente
<schedules> - Zeitpläne
Attribute
name="name"
Der Name des Zeitplans.
Ein so benannter Zeitplan kann mit <run_time schedule="…"> abgerufen werden.
substitute="schedule_path" Zeitweilig zu überdeckender Zeitplan
Der mit substitute="schedule_path" angegebene Zeitplan soll zeitweilig durch den hier definierten überdeckt
werden.
Die Zeitspanne wird mit den Attributen valid_from= und valid_to= angegeben.
Ein überdeckender Zeitplan kann nicht direkt mit <run_time schedule="…"> abgerufen werden.
Meldungen
[ERROR]
SCHEDULER-463
schedule: substituted 'schedule' is a substitute [info]
SCHEDULER-705
Substitute 'schedule' is valid now [info]
SCHEDULER-706
Standard 'schedule' is valid now valid_from="yyyy-mm-dd HH:MM[:ss]"
Ist substitute= angegeben und fehlt valid_from=, dann wird der angegebene Schedule ab sofort überdeckt.
Meldungen
Software- und Organisations-Service GmbH
August 2014
66
[ERROR]
SCHEDULER-465
'schedule' overlaps schedule [ERROR]
SCHEDULER-466
'schedule' is a substitute for another schedule and cannot be used directly valid_to="yyyy-mm-dd HH:MM[:ss]"
Ist substitute= angegeben und fehlt valid_to=, dann endet die Überdeckung nicht.
Meldungen
[ERROR]
SCHEDULER-464
schedule: valid_from=""> is not before valid_to="" [ERROR]
SCHEDULER-465
'schedule' overlaps schedule [ERROR]
SCHEDULER-466
'schedule' is a substitute for another schedule and cannot be used directly XML-Element <schedules>
<schedules >
schedule
</schedules>
Zeitplan
Verhalten mit <base>
Ergänzt ein Element <schedules> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<config> - Konfiguration
XML-Element <script>
<script
language
com_class
encoding
filename
java_class
java_class_path
>
include
</script>
= "language"
= "com_class_name"
= "encoding"
= "filename"
= "java_class_name"
= "java_class_path"
Fügt Text aus einer Datei ein
Hier wird der auszuführende Programm-Code angegeben, entweder direkt als Text oder indirekt als Verweis auf
Binär-Code.
<script> kann den Quell-Code als Text enthalten. Er kann in <![CDATA[ und ]]> eingeschlossen sein.
Verhalten mit <base>
Software- und Organisations-Service GmbH
August 2014
67
Das Skript wird dem in einer Basiskonfiguration definierten Skript angehängt.
Eltern Elemente
<config> - Konfiguration
<scheduler_script> <job> - Definition eines Jobs
<monitor> - Monitor, zum Überwachen des Jobs
Attribute
language="language"
Sprache des Programm-Codes. Wird nicht zusammen mit dem Attribute com_class verwendet. Die
Großschreibung spielt keine Rolle.
com_class="com_class_name"
Name einer COM-Klasse (nur Windows). Die COM-Klasse kann die Methoden spooler_open(), spooler_process()
etc. bereitstellen.
encoding="encoding"
Nur unter Windows für language="shell": Gibt die Codierung an, in der der JobScheduler die temporäre .cmd
-Datei erstellt. Windows verlangt für Batch-Dateien encoding="oem", was voreingestellt ist. Außerdem möglich:
"cp850", "cp437" und "latin1".
filename="filename"
Zusammen mit dem Attribut com_class können Sie hier den Namen der DLL angeben, die die COM-Klasse
implementiert, falls diese nicht registriert ist.
java_class="java_class_name"
Wenn der Job als Java-Klasse realisiert ist, dann geben Sie mit diesem Attribut deren Namen an.
Ein in einer Basiskonfiguration angegebener Name kann überschrieben werden. Die nächste Task (die in einem
eigenen Prozess läuft) verwendet die neue Klasse.
java_class_path="java_class_path"
Erlaubt einen jobspezifischen Java Klassenpfad.
Dieser Klassenpfad wird dem Klassenpfad (factory-ini) davorgesetzt.
XML-Element <security>
<security
ignore_unknown_hosts
>
allowed_host
</security>
Software- und Organisations-Service GmbH
= "yes_no"
Rechner, der Verbindung aufnehmen darf
August 2014
68
<security> gibt die Rechner und Netzwerke an, die per TCP und UDP Kommandos ausführen dürfen.
Verhalten mit <base>
Ergänzt ein Element <security> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<config> - Konfiguration
Attribute
ignore_unknown_hosts="yes_no" (Initialwert:no)
Mit ignore_unknown_hosts="yes" ignoriert der JobScheduler unbekannte oder nicht auflösbare Hostnamen in <
allowed_host>.
Das Attribut wirkt nur auf die hier angegebenen <allowed_host>, nicht auf die Basiskonfiguration.
XML-Element <service_request>
<service_request
url
>
web_service
content
</service_request>
= "url"
Web-Dienst
Inhalt einer Web-Dienst-Anforderung
Beispiel:
<service_request url="http://host.company.com:80/web_service">
<content>
<my_request>
…
</my_request>
</content>
</service_request>
<service_request> tritt an zwei Stellen auf:
•
•
Als Eingabe einer XLST-Transformation mit <web_service request_xslt_stylesheet="…"> .
Als Ergebnis einer XLST-Transformation mit <web_service forward_xslt_stylesheet="…"> .
Attribute
url="url"
URL des Web-Dienstes
Software- und Organisations-Service GmbH
August 2014
69
XML-Element <service_response>
<service_response >
content
</service_response>
Inhalt einer Web-Dienst-Anforderung
XML-Element <settings>
<settings >
mail_on_error
mail_on_warning
mail_on_success
mail_on_process
mail_on_delay_after_err
or
log_mail_to
log_mail_cc
log_mail_bcc
log_level
history
history_on_process
history_with_log
</settings>
Verhalten mit <base>
Ergänzt ein Element <settings> an der entsprechenden Stelle mit gleichem Attribut name= aus der
Basiskonfiguration. Hier angegebene Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<job> - Definition eines Jobs
XML-Element <sos.spooler.variable_set>
<sos.spooler.variable_set >
variable
Eine Variable
</sos.spooler.variable_set>
Beispiel:
<sos.spooler.variable_set>
<variable name="param1" value="11111">
<variable name="param2" value="2222">
</sos.spooler.variable_set>
<sos.spooler.variable_set> wird beim Speichern der Order.payload in der Datenbank verwendet.
Siehe auch <params> (Seite 54).
Software- und Organisations-Service GmbH
August 2014
70
XML-Element <spooler>
<spooler >
config
</spooler>
Konfiguration
XML-Element <start_job>
<start_job
job
name
after
at
force
web_service
= "job_name"
= "name"
= "zahl"
= "yyyy-mm-dd hh:mm:ss | now |
period"
= "yes|no"
= "name"
>
params
</start_job>
Parameter
Beispiel:
<start_job job="mein_job" at="now">
<params>
<param name="anzahl" value="100"/>
</params>
</start_job>
Eltern Elemente
<commands> - XML-Kommandos
Attribute
job="job_name"
Der Jobname.
name="name"
Hier kann der Task ein Name gegeben werden.
after="zahl"
Eine Anzahl Sekunden, nach deren Ablauf erst die Task gestartet werden soll.
at="yyyy-mm-dd hh:mm:ss | now | period" (Initialwert:now)
Zeitpunkt, zu dem die Task gestartet werden soll. Die Voreinstellung force="yes" setzt <run_time> ist außer
Kraft.
Relative Zeitangaben "now", "now + HH:MM[:SS]" und "now + SECONDS" sind möglich.
Software- und Organisations-Service GmbH
August 2014
71
at="period" lässt den Job erst Starten, wenn die <run_time> dies zulässt (also in der laufenden oder der
nächsten Periode).
force="yes|no" (Initialwert:yes)
force="no":
•
•
•
Wenn der Job gestoppt ist, bleibt er gestoppt.
Wenn mit at= eine Startzeit angegeben ist, zu dem Zeitpunkt <run_time> oder <schedule> keine Start
zulassen, dann verschiebt der JobScheduler den Start bis zur nächsten Periode.
Daraus ergibt sich, dass at="now" wie at="period" wirkt.
force="yes":
•
•
Der Job wird sofort entstoppt (falls er gestoppt ist)
Eine mit at= angegebene Startzeit nimmt keine Rücksicht auf <run_time> oder <schedule> , die Task wird
also auch zu dem Zeitpunkt gestartet, wenn keine Periode vorliegt.
web_service="name"
Wenn die Task ausgeführt worden ist, wird sie mit einem Stylesheet transformiert und einem Web-Dienst
übergeben.
Siehe <web_service> (Seite 73).
XML-Element <start_when_directory_changed>
<start_when_directory_changed
directory
= "path"
regex
= "regex"
> </start_when_directory_changed>
<start_when_directory_changed directory="directory" regex="regex"/> wirkt wie der programmierte
Aufruf
start_when_directory_changed( "directory", "regex" ).
Wenn das Verzeichnis nach dem Start des Schedulers entfernt wird, also nicht mehr überwacht werden kann,
startet eine Task, während der Job gestoppt wird. Weitere Tasks werden nicht gestartet (weil der Job gestoppt ist).
Der Job sollte mit <run_time repeat="…"> periodisch gestartet und mit <delay_after_error> versehen werden.
Siehe Verzeichnisüberwachung mit Dateiaufträgen (Seite 159) und Job.start_when_directory_changed() .
Eltern Elemente
<job> - Definition eines Jobs
Attribute
directory="path"
Eine Änderung des Verzeichnisses (Datei wird hinzugefügt oder gelöscht) führt zum Start einer Task. Ebenso,
wenn das Verzeichnis entfernt wird.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Software- und Organisations-Service GmbH
August 2014
72
regex="regex"
Wenn Sie hier einen Regulären Ausdruck angeben, werden nur Dateinamen beachtet, die ihm entsprechen.
Das Löschen einer Datei, deren Namen dem Regulären Ausdruck entsprach, führt nicht zum Start des Jobs.
XML-Element <ultimos>
<ultimos >
day
</ultimos>
Perioden für bestimmte Tage
Setzt die Perioden für einen bestimmten Tag des Monats fest, vom Ende her gezählt.
Beispiel:
<ultimos>
<day day="0">
<period begin="10:00" end="12:00"/>
</day>
<day day="1">
<period begin="08:00" end="12:00"/>
<period begin="15:00" end="18:00"/>
</day>
</ultimos>
Setzt die Laufzeiten fest für den Letzten eines Monats 10:00 bis 12:00 und für den Vorletzten eines Monats 08:00 bis
12:00 und 15:00 bis 18:00.
Verhalten mit <base>
Ergänzt ein Element <ultimos> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<run_time> - Laufzeiten
XML-Element <variable>
<variable
name
value
> </variable>
= ""
= ""
Name der Umgebungsvariablen
Wert der Umgebungsvariablen
Verhalten mit <base>
Ergänzt ein Element <variable> an der entsprechenden Stelle mit gleichem Attribut name= aus der
Basiskonfiguration. Hier angegebene Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<environment> - Umgebungsvariablen
Software- und Organisations-Service GmbH
August 2014
73
<sos.spooler.variable_set> - Variablenmenge
Attribute
name="" Name der Umgebungsvariablen
Der Name der Umgebungsvariablen. Unter Windows ist die Großschreibung nicht relevant.
Derselbe Name kann mehrmals verwendet werden, wenn der Wert erweitert werden soll (s. Beispiel mit PATH).
value="" Wert der Umgebungsvariablen
Mit '$' kann der Wert einer Umgebungsvariablen abgerufen werden, die auch eine vorher mit <variable> gesetzte
sein kann.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
XML-Element <web_service>
<web_service
name
url_path
= "name"
= "url_path"
job_chain
= "job_chain"
timeout
request_xslt_stylesheet
= "seconds"
= "path"
response_xslt_stylesheet
= "path"
forward_xslt_stylesheet
= "path"
debug
= "yes|no"
Name des Dienstes im Scheduler
URL-Pfad, unter dem der Web-Dienst
ansprechbar ist
Jobkette, die Web-Service-Operationen
ausführt
Frist
Transformiert die Anforderung in ein
Scheduler-Kommando
Transformiert die Antwort des Kommandos
in die Antwort des Web-Dienstes
Zur Weiterleitung am Ende des Auftrags
bzw. der Task
>
params
</web_service>
Parameter
Web-Dienste lassen sich einrichten, um Aufträge oder Tasks zu erzeugen. Die angenommene Anforderung wird
sofort beantwortet. Das Ergebnis des Auftrags oder der Task kann zu einem anderen Web-Dienst weitergeleitet
werden.
Der TCP-Port des HTTP-Servers wird mit <config tcp_port="…"> festgelegt.
Zwei Arten von Web-Services werden unterschieden:
•
Web-Service mit job_chain
•
Web-Service mit request_xslt_stylesheet
Web-Service mit job_chain
<web_service
name
url_path
job_chain
timeout
/>
=
=
=
=
"my_web_service"
"/web_service"
"web_service"
"900"
Software- und Organisations-Service GmbH
August 2014
74
Ein HTTP-POST auf den URL-Pfad des Web-Dienstes lässt den JobScheduler einen Auftrag erzeugen und ihn in
die angegebene Jobkette einreihen. Die Jobs haben Zugriff auf die HTTP-Daten über
Order.web_service_operation . Die HTTP-Anfrage wird mit Web_service_response.send() beantwortet.
Web-Service mit request_xslt_stylesheet
<web_service
name
url_path
request_xslt_stylesheet
response_xslt_stylesheet
forward_xslt_stylesheet
/>
=
=
=
=
=
"my_web_service"
"/web_service"
"$SCHEDULER_DIR/web_service_request.xsl"
"$SCHEDULER_DIR/web_service_response.xsl"
"$SCHEDULER_DIR/web_service_forward.xsl"
Ein HTTP-POST auf den URL-Pfad des Web-Dienstes löst folgende Schritte aus.
1.
Das mit HTTP-POST übergebene XML-Dokument packt der JobScheduler in ein <service_request> .
<service_request>
<web_service name="service_name" url_path="url_path"/>
<content>…xmldata…</content>
</service_request>
2.
3.
4.
Das <service_request> wird mit dem Stylesheet request_xslt_stylesheet in ein XML-Kommando
transformiert, in der Regel <add_order> oder <start_job> .
Der JobScheduler führt das XML-Kommando aus.
Die Antwort des XML-Kommandos (<spooler> <answer> , die auch eine Fehlermeldung <ERROR> enthalten
kann) wird mit dem response_xslt_stylesheet zu einem <service_response> transformiert. Der
JobScheduler liefert den Inhalt von <content> über die offene HTTP-Verbindung zurück.
<service_response>
<content>…xmldata…</content>
</service_response>
5.
Um eine ungültige Anforderung zu beantworten, kann das Stylesheet request_xslt_stylesheet sofort ein <
service_response> liefern.
Fehlerbehandlung
Wenn mit POST kein XML-Dokument übergeben worden ist, führt das zum HTTP-Fehlercode "404 Bad Request".
Ein Fehler in der Transformation führt zum HTTP-Fehlercode "500 Internal Server Error".
Ergebnis der Ausführung weiterleiten (Forwarding)
Aufträge und Tasks können einem Web-Dienst zugeordnet sein. Die Kommandos <add_order> und <start_job>
erhalten dazu das neue Attribut web_service="service_name".
Solche Aufträge und Tasks werden, wenn sie enden und dem Web-Dienst ein forward_xslt_stylesheet
zugeordnet ist, mit diesem als <order> bzw. <task> übergeben:
<order service="service_name" last_job="job_name" …>
<payload>
<params>
…
</params>
</payload>
<log last_error="…" last_warning="…"/>
…
</order>
bzw.
Software- und Organisations-Service GmbH
August 2014
75
<task job="…" …>
<log last_error="…" last_warning="…"/>
…
</task>
Ergebnis der Transformation ist ein <service_request> :
<service_request url="url">
<content>…data…</content>
</service_request>
Jobkette scheduler_service_forwarding
Der JobScheduler packt das <service_request> in die Payload eines neuen Auftrags und übergibt diesen der
vordefinierten Jobkette scheduler_service_forwarding.
JobScheduler_service_forwarder
Der einzige Job der Jobkette, scheduler_service_forwarder, baut mit dem URL eine HTTP-Verbindung auf,
überträgt mit POST die Daten, wartet die Antwort ab und protokolliert sie.
Eigenschaften des Jobs können in der Konfigurationsdatei eingestellt werden, wie wenn der Job mit <base>
bekannt gemacht worden wäre. Ein Beispiel:
<job name="scheduler_service_forwarder">
<delay_order_after_setback setback_count="1" delay="00:01"/>
<delay_order_after_setback setback_count="2" delay="01:00"/>
<delay_order_after_setback setback_count="3" delay="24:00"/>
<run_time>
<period begin="07:00" end="17:00"/>
</run_time>
</job>
Implementiert ist der Job in Java (siehe auch <web_service forward_xslt_stylesheet="…"> (Seite 73)).
Verhalten mit <base>
Ergänzt ein Element <web_service> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<http_server> - HTTP-Server
Attribute
name="name" Name des Dienstes im Scheduler
url_path="url_path" URL-Pfad, unter dem der Web-Dienst ansprechbar ist
Er soll mit einem Schrägstrich beginnen.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
job_chain="job_chain" Jobkette, die Web-Service-Operationen ausführt
Software- und Organisations-Service GmbH
August 2014
76
Eine Web-Service-Anforderung erzeugt einen Auftrag, der in diese Jobkette eingereiht wird. Die Nutzdaten der
Anforderung stehen in spooler_task.order.web_service_operation.request.binary_content.
Nicht zusammen mit den Attributen request_xslt_stylesheet und response_xslt_stylesheet verwendbar.
Für den Zugriff auf die Web-Anforderung siehe Order.web_service_operation .
timeout="seconds" Frist
Wenn innerhalb der Frist der Auftrag nicht dem ersten Job zur Ausführung übergeben wird, lehnt der JobScheduler
die HTTP-Anforderung mit "504 Gateway Timeout" ab und zieht den Auftrag mit der Meldung SCHEDULER-290
zurück.
request_xslt_stylesheet="path" Transformiert die Anforderung in ein Scheduler-Kommando
Pfad des XSLT-Stylesheets, das das mit HTTP-POST übergebene XML-Dokument in ein Scheduler-Kommando
wandelt.
Nicht zusammen mit dem Attribut job_chain verwendbar.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
response_xslt_stylesheet="path" Transformiert die Antwort des Kommandos in die Antwort des
Web-Dienstes
Pfad des XSLT-Stylesheets, das das XML-Ergebnis des Scheduler-Kommandos in ein XML-Dokument wandelt, mit
der der JobScheduler die Web-Dienst-Anfrage beantwortet.
Nicht zusammen mit dem Attribut job_chain verwendbar.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
forward_xslt_stylesheet="path" Zur Weiterleitung am Ende des Auftrags bzw. der Task
Wenn ein mit <add_order web_service="…"> gestarteter Auftrag oder eine mit <start_job web_service="…">
gestartete Task endet und ein forward_xslt_stylesheet angegeben ist, dann wird der Auftrag bzw. die Task mit
dem Stylesheet zu einem <service_request> transformiert, das den Aufruf eines anderen Web-Dienstes auslöst.
Nicht zusammen mit dem Attribut job_chain verwendbar.
Benötigt
Java
und
das
Klassen-Archiv
xercesImpl.jar
im
CLASS_PATH
(s.
<c o n f i g
java_class_path="…/xercesImpl.jar"> ).
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
debug="yes|no" (Initialwert:no)
Nur, wenn request_xslt_stylesheet angegeben ist:
debug="yes" lässt den JobScheduler die intern erzeugten XML-Dokumente in Dateien im mit -log-dir
festgelegten Verzeichnis ablegen:
Der JobScheduler räumt die Dateien nicht ab.
Software- und Organisations-Service GmbH
August 2014
77
XML-Element <weekday>
<weekday
day
which
>
period
</weekday>
= "weekday"
= "integer"
Periode
Setzt die Perioden für einen bestimmten Tag des Monats fest.
Beispiel:
<monthdays>
<day day="1">
<period begin="10:00" end="12:00"/>
</day>
<day day="2">
<period begin="08:00" end="12:00"/>
<period begin="15:00" end="18:00"/>
</day>
</monthdays>
Setzt die Laufzeiten fest für den Ersten eines Monats 10:00 bis 12:00 und für den Zweiten eines Monats 08:00 bis
12:00 und 15:00 bis 18:00.
Beispiel:
<monthdays>
<day day="5">
<period single_start="16:00"/>
</day>
</monthdays>
Startet den Job an jedem 5. eines Monats um 16 Uhr.
Verhalten mit <base>
Ergänzt ein Element <weekday> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<monthdays> - Perioden für bestimmte Tage des Monats
Attribute
day="weekday"
Name des Wochentags: "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" und "sunday".
Mehrere Tage können durch Leerzeichen getrennt angegeben werden.
which="integer"
which="1" bis which="4": Der erste bis vierte Wochentag eines jeden Monats.
Software- und Organisations-Service GmbH
August 2014
78
which="-1" bis which="-4": Der letzte bis viertletzte Wochentag eines jeden Monats.
XML-Element <weekdays>
<weekdays >
day
</weekdays>
Perioden für bestimmte Tage
Setzt die Perioden für bestimmten Wochentage fest.
Beispiel:
<weekdays>
<day day="1">
<period begin="10:00" end="12:00"/>
</day>
<day day="2">
<period begin="08:00" end="12:00"/>
<period begin="15:00" end="18:00"/>
</day>
</weekdays>
Setzt die Laufzeit fest für Montags 10:00 bis 12:00 und Dienstags 08:00 bis 12:00 und 15:00 bis 18:00.
Verhalten mit <base>
Ergänzt ein Element <weekdays> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<run_time> - Laufzeiten
1.2 Konfiguration aus Hot Folders
Jobs, Job-Ketten, Daueraufträge, Prozessklassen und Sperren (im folgenden Objekte genannt) können in
einzelnen Dateien gehalten werden, die der JobScheduler automatisch nach Änderung übernimmt. Der
JobScheduler überwacht Verzeichnisse (Hot Folders), für die hinzugefügte, geänderte und gelöschte Dateien als
entsprechende Operationen zum Hinzufügen, Ändern und Entfernen von Jobs, Job-Ketten etc. ausgeführt werden.
1.2.1 Konfigurationsverzeichnis
Die Dateien liest der JobScheduler aus dem Konfigurationsvereichnis und dessen Unterverzeichnissen. Das
Konfigurationsverzeichnis kann eingestellt werden mit
•
•
configuration_directory="…"> , voreingestellt ist das Verzeichnis ./config/live im
Verzeichnis der Konfigurationsdatei.
-config . Die Konfigurationsdatei erwartet der JobScheduler dann im Konfigurationsverzeichnis
(Voreinstellung ./config) unter dem Namen scheduler.xml.
<config
Der JobScheduler überwacht das Konfigurationsverzeichnis und seine Unterverzeichnisse und übernimmt
hinzugefügte und geänderte Dateien. Löschen einer Datei führt zum Löschen des entsprechenden Objekts im
JobScheduler.
Software- und Organisations-Service GmbH
August 2014
79
Unter Windows verwendet der JobScheduler die Verzeichnisüberwachung des Betriebsystems, bemerkt
Änderungen also sofort. Außerdem prüft er die Verzeichnisse im Minutenabstand.
Unter Unix überwacht der JobScheduler die Verzeichnisse im Abstand von zwischen 5 und 60 Sekunden. Nach
einer Änderung verkürzt er den Abstand auf fünf Sekunden und verlängert ihn, wenn keine Änderung vorliegt, bis
auf 60 Sekunden.
Achtung!
Seit Version 1.5.xx der JobScheduler engine werden Ordner, deren Name mit einem . (Punkt) beginnt, nicht
überwacht. Konfigurationsdateien, die sich in einem solchen Ordner befinden, werden ignoriert.
1.2.2 Dateien für Prozessklassen, Sperren, Jobs, Job-Ketten und Daueraufträge
Die Dateien enthalten die XML-Elemente für die Definition des Objekts und werden aufgrund folgender
Namenskonventionen verarbeitet:
Das Attribut name= sollte nicht angegeben werden. Wird es angegeben, muss es dem Dateinamen entsprechen.
Die Attribute replace= und spooler_id= sind nicht zulässsig.
Beispiel eines Jobs (auftragsgesteuert): Datei hello_world.job.xml:
<job order="yes">
<script language="shell"><![CDATA[
echo hello world
]]></script>
</job>
Beispiel einer Job-Kette: Datei echo_hello.job_chain.xml:
<job_chain>
<job_chain_node state="start" job="hello_world" next_state="success"
error_state="error"/>
<job_chain_node state="success"/>
<job_chain_node state="error"/>
</job_chain>
Beispiel eines Auftrags: Datei echo_hello,echo_trigger.order.xml:
<order>
<run_time>
<period repeat="3600"/>
</run_time>
</order>
1.2.3 Spiegelung des Verzeichnisses im JobScheduler
Der JobScheduler legt für jede Datei mit bekannter Dateinamensendung ( .job usw.) ein entsprechendes Objekt im
JobScheduler an und verbindet es mit der Datei. Der JobScheduler überwacht den Zeitstempel der Datei und geht
bei Änderung wie folgt vor.
Software- und Organisations-Service GmbH
August 2014
80
•
•
•
•
•
•
Ein hinzugefügter Dateiname führt zur Anlage eines neuen, noch leeren Objekts im JobScheduler, das mit der
Datei verbunden ist. Das Objekt ist mit <show_state> sichtbar. Z.B. wird eine Datei xxx.job.xml im
JobScheduler gespiegelt als ein Job <job name="xxx"> , auch wenn die Datei nicht lesbar ist.
Eine gelöschte Datei führt zum Löschen des Objekts. Das Löschen wird in der Regel verzögert, weil z.B. bei
einem Job das Ende der Tasks abgewartet werden muss.
Wenn während des Löschens die Datei wieder angelegt wird, geht der JobScheduler wie bei einer
geänderten Datei vor.
Nach einer Änderung einer Datei (der Zeitstempel hat sich geändert) liest der JobScheduler die Datei. Kann
die Datei geladen werden, dann tauscht er Prozessklassen und Sperren direkt, während er Jobs, Job-Klassen
und Daueraufträge verzögert tauscht, weil noch die laufenden Operationen des zu ersetzenden Objekts
abgewartet werden müssen (Details unten).
Ein Fehler beim Lesen einer Datei beeinflusst nicht ein bereits vorhandenes Objekt. Der JobScheduler
vermerkt den Fehler im Objekt und verschickt eine eMail. <show_state> zeigt den Fehler.
Objekte mit denselben (Datei)Namen können mehrfach in unterschiedlichen Verzeichnissen vorhanden sein.
Der JobScheduler unterscheidet diese Objekte anhand ihres Pfads. Wenn auf Objekte aus anderen
Verzeichnissen verwiesen wird, z.B.
<job
process_class="/my_project/multi.process_class.xml"/>
<job_chain_node job="/other_project/hello_world"/>
dann müssen absolute oder relative Pfade angegeben werden.
1.2.4 Wirkung der Kommandos zum Ändern und Löschen
Kommandos zum Ändern von Objekten ändern nicht die Dateien.
Kommandos zum Löschen von Objekten löschen die zugrundliegende Datei (die Debug-Version des Schedulers
versieht den Dateinamen mit dem Anhängsel "-REMOVED").
1.2.5 Verhalten der einzelnen Objekttypen
1.2.5.1 Prozessklassen
Änderungen an einer Prozessklasse übernimmt der JobScheduler sofort.
Beim Löschen einer Prozessklasse beendet der JobScheduler alle zugehörigen Tasks. Erst wenn keine Task mehr
läuft, löscht er die Prozessklasse. Bis dahin startet der JobScheduler keine weiteren Tasks, uns verhält sich als ob
die Prozessklasse erschöpft wäre.
1.2.5.2 Sperren
Änderungen an einer Sperre übernimmt der JobScheduler sofort.
Beim Löschen einer Sperre beendet der JobScheduler alle zugehörigen Tasks. Erst wenn keine Task mehr läuft,
löscht er die Sperre. Bis dahin startet der JobScheduler keine weiteren Tasks, und verhält sich als ob die Sperre
belegt wäre.
1.2.5.3 Jobs
Einen geänderten Job übernimmt der JobScheduler, nachdem er alle Tasks beendet hat.
Software- und Organisations-Service GmbH
August 2014
81
Beim Löschen verfährt der JobScheduler ebenso. Keine neue Tasks werden gestartet.
Fehlt dem Job die Prozessklasse oder eine Sperre, wirkt das so, als ob die Prozessklasse erschöpft oder die
Sperre nicht verfügbar wäre.
1.2.5.4 Job-Ketten
Eine geänderte Job-Kette übernimmt der JobScheduler, nachdem alle Aufträge ihren Job-Schritt beendet haben.
Weitere Job-Schritte werden solange verhindert.
Aufträge in Job-Kettenknoten mit gleichem Auftragszustand übernimmt der JobScheduler in die geänderte
Job-Kette.
Beim Löschen verfährt der JobScheduler ebenso.
Fehlt der Job-Kette ein Job, dann sammeln sich die Aufträge im Job-Kettenknoten, als wäre der Job nicht zur
Auftragsausführung bereit.
1.2.5.5 Verschachtelte Job-Ketten
Fehlt der Job-Kette eine verschachtelte Job-Kette <job_chain_node.job_chain> , dann ist die gesamte Job-Kette
nicht bereit. Alle untergeordneten Job-Ketten müssen bekannt sein, damit der JobScheduler die Eindeutigkeit der
Auftragskennungen sicherstellen kann.
Ebenso wird eine untergeordnete Job-Kette erst gelöscht, wenn auch die übergeordnete Job-Kette gelöscht ist.
1.2.5.6 Daueraufträge
Daueraufträge werden anders behandelt als die anderen Objekte. Zum einen haben sie einen zusammengesetzten
Namen (job_chain= und id= statt name=), zum anderen werden Dateiänderungen nicht jederzeit beachtet. Eine
gelöschte oder geänderte Auftragsdatei wird nur beachtet, wenn
•
•
•
der Auftrag nicht bekannt,
der Auftrag noch nicht gestartet worden oder
der Auftrag wegen <run_time> wiederholt, aber noch nicht gestartet worden ist.
1.2.6 Kommando <show_state>
Das Kommando liefert zu jedem dateibasiertem Objekt ein <file_based> mit Angaben zur Datei.
Wenn eine Ersetzung im Gang ist, zeigt <replacement> dies an.
Wenn eine Datei gelöscht ist, aber das dazugehörige Objekt noch nicht, wird <removed> geliefert.
1.3 Zentrale Konfiguration durch einen Supervisor JobScheduler
Bei der zentralen Administration von Konfigurationen für Objekte (Jobs, Job-Ketten, Aufträgen und Sperren)
melden sich sogenannte "Workload JobScheduler" an einem zentralen JobScheduler, dem "Supervisor" an und
werden von ihm mit den Konfigurationsdateien für Objekte versorgt. Zusätzlich zu der vom Supervisor
bereitgestellten Konfiguration werden die lokalen Konfigurationen aus den Hot Folders (Seite 78) der Workload
JobScheduler (./config/live) sowie der Konfigurationsdatei ./config/scheduler.xml eingelesen.
Software- und Organisations-Service GmbH
August 2014
82
1.3.1 Eine typische Konfiguration
Ein Supervisor JobScheduler mit dem Verzeichnis ./config/remote. Darin gibt es einen Ordner _all, der
allgemeine Objekte für alle Workload JobScheduler bereitstellt. Für die Workload JobScheduler gibt es jeweils ein
Verzeichnis mit den zu replizierenden Objekten.
1.3.2 Der Supervisor
Der Supervisor verwaltet die Konfigurationen für die Workload JobScheduler in dem Verzeichnis ./config/remote.
Beim Start des Supervisors sowie bei Änderungen an den Konfigurationsdateien werden diese an die betroffenen,
laufenden Workload JobScheduler in deren Verzeichnis ./config/cache repliziert. Die Workload JobScheduler
überwachen dieses lokale Verzeichnis und übernehmen die Konfigurationen daraus (siehe Hot Folders (Seite 78)).
Im zentralen Konfigurationsverzeichnis ./config/remote wird dazu pro Workload JobScheduler ein Verzeichnis
mit dem Namen host#port angelegt. Außerdem wird pro vorhandenem JobScheduler Cluster siehe Backup
Clusters (Seite 138) und Load Balancing (Seite 164), ein Verzeichnis mit der Scheduler ID des Clusters angelegt.
Die in den jeweiligen Verzeichnissen enthaltene Verzeichnisstruktur wird an die zugehörigen Workload
JobScheduler bzw. an den zugehörigen JobScheduler Cluster repliziert.
Zusätzlich wird die Verzeichnisstruktur, die im Ordner _all vorliegt, an alle Workload JobScheduler repliziert.
Damit ist es möglich Definitionen für Objekte, die für alle Workload JobScheduler gültig sein sollen, an einer Stelle
zu verwalten.
Fällt der Supervisor aus, können die Workload JobScheduler mit der zuletzt erfolgreich replizierten Konfiguration
problemlos gestartet werden.
Software- und Organisations-Service GmbH
August 2014
83
1.3.3 Einen JobScheduler an den Supervisor anmelden
Ein Workload JobScheduler meldet sich am Supervisor mit einem Eintrag in der Konfigurationsdatei
./config/scheduler.xml an. Das Attribut <config supervisor="…"> im Element config bezeichnet den Host
und den Port des Supervisors in der Syntax host:port.
Wenn der Supervisor nicht erreichbar ist, startet der Workload JobScheduler mit der zuletzt erfolgreich replizierten
Konfiguration.
1.3.4 Wirksamkeit von lokalen Änderungen an der Konfiguration
Lokale Konfigurationen können zusätzlich zu der Konfiguration, die durch den Supervisor bereitgestellt wurde,
angelegt werden.
Die JobScheduler Konfigurationsdatei ./config/scheduler.xml eines Workload Schedulers kann Definitionen für
lokale Objekte beinhalten. Ebenso können im Hot Folder ./config/live lokale Objekte definiert werden.
Die zentral beim Supervisor gespeicherte und erfolgreich replizierte Konfiguration hat Vorrang vor lokalen
Konfigurationen. Bei Namensgleichheit wird die zentrale Konfiguration verwendet. Wenn ein bereits in der
zentralen Konfiguration vorhandenes Element in der lokalen Konfiguration hinzugefügt wird, wird das vom
Workload JobScheduler bemerkt und abgewiesen. Im Protokoll wird dann eine entsprechende Warnung
eingetragen.
Wenn beim Supervisor ein Objekt hinzugefügt wird, das bereits in der lokalen Konfiguration vorhanden ist, wird die
lokale Konfiguration überschrieben. Die lokale Konfigurationsdatei bleibt erhalten, wird aber nicht mehr verwendet
(stattdessen wird eine Warnung ins Protokoll geschrieben s.o.).
Wird ein Objekt beim Supervisor gelöscht, das auch in der lokalen ´Konfiguration vorhanden ist, wird der Job aus
dem Workload JobScheduler entfernt:
a) Der Job ist im Hot Folder (Seite 78) ./config/live lokal konfiguriert: die lokale Konfiguration wird eingelesen
b) Der Job ist in ./config/scheduler.xml konfiguriert: der Job wird beim nächsten Start des JobSchedulers
eingelesen.
1.3.5 Übernehmen einer vorhandenen Konfiguration in die zentrale Verwaltung
Wenn ein vorhandener, lokal administrierter JobScheduler in die zentrale Verwaltung eines Supervisors
aufgenommen werden soll, sind folgende Schritte notwendig.
•
•
•
•
Ordner für Workload JobScheduler beim Supervisor anlegen (./config/remote/host#port)
Ordner ./config/cache beim Workload JobScheduler anlegen
Inhalt von Ordner ./config/live des Workload JobSchedulers nach ./config/remote/host#port des
Supervisors kopieren
Anmeldung an an Supervisor konfigurieren. Dazu Eintrag <config supervisor="…"> in
./config/scheduler.xml des Workload JobSchedulers anlegen
1.3.6 Verhalten der JobScheduler beim Start
Software- und Organisations-Service GmbH
August 2014
84
1.3.6.1 Workload JobScheduler
Der JobScheduler baut die Verbindung zum Supervisor auf und bestellt die Konfiguration. Erst nach der Replikation
beginnt er den Betrieb. Wenn der Supervisor nicht erreichbar ist, verwendet der JobScheduler die vorhandene
Konfiguration. Falls die Replikation später möglich wird, wird sie durchgeführt. Änderungen an der zentralen
Konfiguration werden dann sofort wirksam.
1.3.6.2 Supervisor JobScheduler
Wenn der Supervisor startet, repliziert er die Konfigurationen für die Workload JobScheduler.
1.4 Datei factory.ini
In der Datei factory.ini können Einstellungen für den JobScheduler vorgenommen werden.
Hinweis: Leere Einträge "eintrag=" gelten als nicht vorhanden und überschreiben keine Einstellung der
XML-Konfiguration (Seite 7).
Beim Aufruf des JobSchedulers können Sie den Pfad dieser Datei mit der Option -ini angeben, z.B.:
…scheduler installation path…\bin\scheduler.exe
-ini=C:/Programme/scheduler/config/factory.ini
Bei der Installation durch das Setup-Programm des JobSchedulers wird die Datei factory.ini im Verzeichnis
…scheduler installation path…\config
abgelegt. Aufrufe über das Startskript setzen den Pfad automatisch richtig.
Falls beim Aufruf des JobSchedulers der Pfad zur Datei sos.ini nicht angegeben wird, gelten folgende Vorgaben:
Unter Windows sollte die Datei dort angelegt werden, wo Windows seine .ini-Dateien erwartet. Das ist
normalerweise im Verzeichnis c:\windows. Sonst wird die Datei im Heimverzeichnis des Benutzers erwartet.
Einstellungen
Sektion: java
class_path = class_path Für Java
Hier können Sie den class_path um Verzeichnisse oder Jars erweitern, die nur für den JobScheduler gelten. Die
Angaben werden der Einstellung in sos.ini (Abschnitt [java], Eintrag class_path= …) vorangestellt.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Sektion: job
history = yes|no Historie schreiben?
Gibt an, ob eine Task-Historie geschrieben werden soll. Der JobScheduler schreibt dann für jede Task einen Satz in
die Datenbank, oder, wenn der JobScheduler ohne Datenbank arbeitet, in eine Datei im mit -log-dir
angegebenen Verzeichnis.
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag history= yes) wird damit überschrieben.
history_archive = yes|no|gzip Historiendateien archivieren?
Software- und Organisations-Service GmbH
August 2014
85
Wenn die Historie in einer Datei, d.h. nicht in einer Datenbank, geführt wird, kann der JobScheduler die Historien
des letzten JobScheduler Laufs archivieren und mit gzip komprimieren.
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag history_archive= no) wird damit überschrieben.
history_columns = name, name, ... Zusätzliche Spalten in der Historie
Eine Task kann mit der Methode Task.set_history_field() die hier angegebenen Felder der Datenbanktabelle
für die Task-Historie setzen.
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag history_columns= …) wird damit überschrieben.
history_file = dateiname Dateiname der Historie (für datenbanklosen Betrieb)
(Seit Version 1.5 wird keine dateibasierte Historie mehr geschrieben. Die databank-basierte Historie ist weiterhin
möglich.)
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag history_file= …) wird damit überschrieben.
history_on_process = yes|no|zahl Nach spooler_process() Historiensatz schreiben?
Bei history_on_process=no oder =0 schreibt der JobScheduler beim Start der Task einen Satz in die Historie,
wenn eine geführt wird.
Bei history_on_process=yes oder =1 schreibt der JobScheduler erst beim ersten Aufruf von spooler_process()
den Satz. Damit wird kein Satz geschrieben, wenn spooler_open() false liefert.
Wenn eine Zahl angegeben ist, schreibt der JobScheduler erst vor der angegebenen Anzahl von Aufrufen von
spooler_process() einen Satz in die Historie.
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag history_on_process= 0) wird damit überschrieben.
Meldungen
[ERROR]
SCHEDULER-335
Only "yes", "no" and a number are allowed with ="": error history_with_log = yes|no|gzip Protokoll in die Historie schreiben?
Der JobScheduler kann das Task-Protokoll in die Historie in der Datenbank schreiben, auch mit gzip komprimiert.
Siehe Kommando <show_task what="log"> (Seite 203).
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag history_with_log= no) wird damit überschrieben.
log_level = log_level Protokollausgaben beschränken
Legt fest, ab welcher Stufe der JobScheduler Protokollzeilen ausgibt. Jede Protokollzeile ist auf einer der
folgenden Stufen: error, warn, info, debug1 bis debug9 (debug1 ist dasselbe wie debug).
Die Option -log-level hat Vorrang.
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag log_level= info) wird damit überschrieben.
log_mail_bcc = email_address Bcc-Empfänger der eMails
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag log_mail_bcc= …) wird damit überschrieben.
log_mail_cc = email_address Cc-Empfänger der eMails
Software- und Organisations-Service GmbH
August 2014
86
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag log_mail_cc= …) wird damit überschrieben.
log_mail_from = email_address Absender der eMails
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag log_mail_from= …) wird damit überschrieben.
log_mail_subject = text Betreff der eMails
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag log_mail_subject= …) wird damit überschrieben.
log_mail_to = email_address To-Empfänger der eMails
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag log_mail_to= …) wird damit überschrieben.
mail_on_delay_after_error = Unterdrückung der eMail bei <delay_after_error>
Voraussetzung: mail_on_error=yes oder mail_on_warning=yes
Wenn ein Job wegen <delay_after_error> erneut startet, werden mit dieser Einstellungen die zahlreichen eMails
reduziert.
Die Einstellung wirkt nicht, wenn für den Job kein <delay_after_error> angegeben ist (dann gilt
mail_on_delay_after_error=all).
Die
Einstellung factory.ini
(Abschnitt [spooler],
first_and_last_only) wird damit überschrieben.
Eintrag
mail_on_delay_after_error=
mail_on_error = yes|no Mit Fehler beendete Task verschickt eMail
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag mail_on_error= no) wird damit überschrieben.
mail_on_process = yes|no|zahl Task mit spooler_process() verschickt eMail
Veranlasst den Versand des Task-Protokolls, wenn die Task wenigstens die angegebene Anzahl Schritte, also
Aufrufe von spooler_process() , ausgeführt hat. Weil Nicht-API-Tasks keine Schritte haben, zählt der
JobScheduler für sie immer einen Schritt.
yes entspricht 1, no entspricht 0.
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag mail_on_process= 0) wird damit überschrieben.
mail_on_success = yes|no Erfolgreich gelaufende Task verschickt eMail
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag mail_on_success= no) wird damit überschrieben.
mail_queue_dir = verzeichnis Verzeichnis der zeitweilig nicht versendbaren eMails
eMails, die der JobScheduler nicht verschicken kann (weil z.B. der SMTP-Server nicht erreichbar ist), werden hier
abgelegt.
Um diese eMails später zu verschicken, muss ein Job geschrieben werden, der die Methode Mail.dequeue()
aufruft.
Der allgemeine Platz für diese Einstellung ist sos.ini (Abschnitt [mail], Eintrag queue_dir= …).
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag mail_queue_dir= …) wird damit überschrieben.
Software- und Organisations-Service GmbH
August 2014
87
Die Einstellung sos.ini (Abschnitt [mail], Eintrag queue_dir= …) wird damit überschrieben.
smtp = host_address Hostname oder IP-Nummer des SMTP-Servers für eMail Versand
Der allgemeine Platz für diese Einstellung ist sos.ini (Abschnitt [mail], Eintrag smtp= …).
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag smtp= …) wird damit überschrieben.
Die Einstellung sos.ini (Abschnitt [mail], Eintrag smtp= …) wird damit überschrieben.
Sektion: smtp
mail.smtp.password = password Kennwort für Authentifizierung am SMTP-Server
Das Kennwort wird zusammen mit dem Eintrag mail.smtp.user beim eMail-Versand dem SMTP-Server zur
Anmeldung übergeben.
mail.smtp.user = name Name für Authentifizierung am SMTP-Server
Sektion: spooler
config = dateiname Konfigurationsdatei
Gibt die Konfigurationsdatei (Seite 7) an.
Die Option -config hat Vorrang.
db = verbindungszeichenfolge Verbindungszeichenfolge der Datenbank
Verbindungszeichenfolge der Datenbank für die Historienführung. Der JobScheduler unterstützt ODBC (Windows)
und JDBC für den Zugriff auf Datenbanken. Ohne Eintrag werden Dateien im .csv-Format erzeugt, siehe
factory.ini (Abschnitt [spooler], Eintrag history_file= …) (Seite 89).
Unter Windows kann ein einfacher Dateiname angegebenen werden, der auf .mdb endet (z.B. scheduler.mdb).
Der JobScheduler verwendet dann eine Microsoft MS-Access Datenbank dieses Namens, die im
Protokollverzeichnis (s. Option -log-dir ) liegt. Der JobScheduler richtet die Datei ein, wenn sie fehlt.
Der JobScheduler richtet die Tabellen selbständig ein.
Software- und Organisations-Service GmbH
August 2014
88
Beispiel:
;
SQL Server 2000 via msbase.jar, msutil.jar, mssqlserver.jar
db = jdbc -class=com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:microsoft:sqlserver://localhost:1433;selectMethod=Cursor;databaseName=scheduler
-user=scheduler -password=secret
;
SQL Server 2000, 2005 via sqljdbc.jar
db = jdbc -class=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc:sqlserver://localhost:1433;sendStringParametersAsUnicode=false;selectMethod=cursor
;databaseName=scheduler -user=scheduler -password=secret
;
MySQL 4.1.7, 5.x
db = jdbc -class=com.mysql.jdbc.Driver jdbc:mysql://localhost/scheduler:3306
-user=scheduler -password=secret
;
Oracle 8.1.7, 9i, 10g
db = jdbc -class=oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@localhost:1521:orcl
-user=scheduler -password=secret
;
PostgreSQL 8.x
db
= jdbc -class=org.postgresql.Driver jdbc:postgresql://localhost:5432/scheduler
-user=scheduler -password=secret
;
IBM DB2 8
db
= jdbc -class=com.ibm.db2.jcc.DB2Driver
jdbc:db2://localhost:50000/scheduler:driverType=2;retrieveMessagesFromServerOnGetMessag
e=true; -user=scheduler -password=secret
;
Firebird 1.5
db
= jdbc -class=org.firebirdsql.jdbc.FBDriver
jdbc:firebirdsql://localhost:3050/scheduler -user=scheduler -password=secret
;
ODBC
db = odbc -db=scheduler_datasource -user=scheduler -password=secret
;
MS Access Datenbank
db = scheduler.mdb
db_check_integrity = yes|no
Der JobScheduler führt zusätzliche Prüfungen der Datenbank-Integrität durch.
db_history_table = name Name der Datenbanktabelle für die Historie
db_members_table =
db_order_history_table = name Name der Datenbanktabelle für die Auftragshistorie
db_order_step_history_table = name Name der Datenbanktabelle für die Schritte der Auftragshistorie
db_orders_table = name Name der Datenbanktabelle für die Aufträge
db_tasks_table = name Name der Datenbanktabelle für die Tasks
db_variables_table = name Name der Datenbanktabelle für die internen Variablen des JobSchedulers
Der JobScheduler hält in dieser Tabelle interne Zähler, zum Beispiel für die nächste freie Task-ID.
history = yes|no Historie schreiben?
Software- und Organisations-Service GmbH
August 2014
89
Gibt an, ob eine Task-Historie geschrieben werden soll. Der JobScheduler schreibt dann für jede Task einen Satz in
die Datenbank, oder, wenn der JobScheduler ohne Datenbank arbeitet, in eine Datei im mit -log-dir
angegebenen Verzeichnis.
Die Einstellung factory.ini (Abschnitt [job], Eintrag history= yes) hat Vorrang.
history_archive = yes|no|gzip Historiendateien archivieren?
Wenn die Historie in einer Datei, d.h. nicht in einer Datenbank, geführt wird, kann der JobScheduler die Historien
des letzten JobScheduler Laufs archivieren und mit gzip komprimieren.
Die Einstellung factory.ini (Abschnitt [job], Eintrag history_archive= no) hat Vorrang.
history_columns = name, name, ... Zusätzliche Spalten in der Historie
Eine Task kann mit der Methode Task.set_history_field() die hier angegebenen Felder der Datenbanktabelle
für die Task-Historie setzen.
Die Einstellung factory.ini (Abschnitt [job], Eintrag history_columns= …) hat Vorrang.
history_file = dateiname Dateiname der Historie (für datenbanklosen Betrieb)
(Seit Version 1.5 wird keine dateibasierte Historie mehr geschrieben. Die databank-basierte Historie ist weiterhin
möglich.)
Die Einstellung factory.ini (Abschnitt [job], Eintrag history_file= …) hat Vorrang.
history_on_process = yes|no|zahl Nach spooler_process() Historiensatz schreiben?
Bei history_on_process=no oder =0 schreibt der JobScheduler beim Start der Task einen Satz in die Historie,
wenn eine geführt wird.
Bei history_on_process=yes oder =1 schreibt der JobScheduler erst beim ersten Aufruf von spooler_process()
den Satz. Damit wird kein Satz geschrieben, wenn spooler_open() false liefert.
Wenn eine Zahl angegeben ist, schreibt der JobScheduler erst vor der angegebenen Anzahl von Aufrufen von
spooler_process() einen Satz in die Historie.
Die Einstellung factory.ini (Abschnitt [job], Eintrag history_on_process= 0) hat Vorrang.
Meldungen
[ERROR]
SCHEDULER-335
Only "yes", "no" and a number are allowed with ="": error history_with_log = yes|no|gzip Protokoll in die Historie schreiben?
Der JobScheduler kann das Task-Protokoll in die Historie in der Datenbank schreiben, auch mit gzip komprimiert.
Siehe Kommando <show_task what="log"> (Seite 203).
Die Einstellung factory.ini (Abschnitt [job], Eintrag history_with_log= no) hat Vorrang.
html_dir = verzeichnis Verzeichnis der HTML-Dateien
In diesem Verzeichnis stehen die HTML-Dateien für den HTTP-Server im JobScheduler.
Wenn die Angabe fehlt, nimmt der JobScheduler das Verzeichnis html im Verzeichnis der Konfigurationsdatei.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Software- und Organisations-Service GmbH
August 2014
90
id = scheduler_id Kennung des JobSchedulers
Der JobScheduler wählt nur die Elemente der XML-Konfiguration aus, deren Attribut spooler_id leer ist oder
denselben Wert wie in dieser Einstellung enthält.
Wenn die Scheduler-ID nicht angegeben ist, beachtet der JobScheduler das XML-Attribut spooler_id= nicht und
wählt alle Elemente der XML-Konfiguration aus.
Siehe z.B. <config> (Seite 20).
Die Option -id hat Vorrang.
include_path = verzeichnis Verzeichnispfad für <include>
Verzeichnis der Dateien, die mit <include> eingezogen werden.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Die Option -include-path hat Vorrang.
<config include_path="…"> wird damit überschrieben.
log = dateiname Dateiname des Protokolls scheduler.log
Wenn diese Einstellung gesetzt ist, schreibt der JobScheduler ein detailliertes Protokoll zur Fehlerdiagnose in die
Datei. Geben Sie den Dateinamen absolut an (als vollständigen Pfad).
Ein Plus (+) direkt vor dem Dateinamen lässt ein vorhandenenes Protokoll fortsetzen. Sonst wird es überschrieben.
Sie können das Protokoll mit Kategorien erweitern oder einschränken. Schreiben Sie die Namen der Kategorien
mit Zwischenräumen getrennt vor den Dateinamen, den Sie mit einem Größerzeichen (>) einleiten.
Hier ist die Liste der Kategorien (Seite 171).
Beispiel:
log = c:/tmp/scheduler.log
log = scheduler.wait >scheduler.log
log = scheduler.wait com_server.* >scheduler.log
Die Option -log hat Vorrang.
log_dir = verzeichnis Verzeichnis der Protokolle
In dieses Verzeichnis schreibt der JobScheduler seine Protokolle.
log_dir= *stderr lässt den JobScheduler die Protokollausgabe nach stderr (auf den Bildschirm) schreiben.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Die Option -log-dir hat Vorrang.
log_level = log_level Protokollausgaben beschränken
Legt fest, ab welcher Stufe der JobScheduler Protokollzeilen ausgibt. Jede Protokollzeile ist auf einer der
folgenden Stufen: error, warn, info, debug1 bis debug9 (debug1 ist dasselbe wie debug).
Die Option -log-level hat Vorrang.
Software- und Organisations-Service GmbH
August 2014
91
Die Einstellung factory.ini (Abschnitt [job], Eintrag log_level= info) hat Vorrang.
log_mail_bcc = email_address Bcc-Empfänger der eMails
Die Einstellung factory.ini (Abschnitt [job], Eintrag log_mail_bcc= …) hat Vorrang.
log_mail_cc = email_address Cc-Empfänger der eMails
Die Einstellung factory.ini (Abschnitt [job], Eintrag log_mail_cc= …) hat Vorrang.
log_mail_from = email_address Absender der eMails
Die Einstellung factory.ini (Abschnitt [job], Eintrag log_mail_from= …) hat Vorrang.
log_mail_subject = text Betreff der eMails
Die Einstellung factory.ini (Abschnitt [job], Eintrag log_mail_subject= …) hat Vorrang.
log_mail_to = email_address To-Empfänger der eMails
Die Einstellung factory.ini (Abschnitt [job], Eintrag log_mail_to= …) hat Vorrang.
mail_encoding =
mail_on_delay_after_error = Unterdrückung der eMail bei <delay_after_error>
Voraussetzung: mail_on_error=yes oder mail_on_warning=yes
Wenn ein Job wegen <delay_after_error> erneut startet, werden mit dieser Einstellungen die zahlreichen eMails
reduziert.
Die Einstellung wirkt nicht, wenn für den Job kein <delay_after_error> angegeben ist (dann gilt
mail_on_delay_after_error=all).
Die Einstellung factory.ini (Abschnitt [job], Eintrag mail_on_delay_after_error= first_and_last_only)
hat Vorrang.
mail_on_error = yes|no Mit Fehler beendete Task verschickt eMail
Die Einstellung factory.ini (Abschnitt [job], Eintrag mail_on_error= no) hat Vorrang.
mail_on_process = yes|no|zahl Task mit spooler_process() verschickt eMail
Veranlasst den Versand des Task-Protokolls, wenn die Task wenigstens die angegebene Anzahl Schritte, also
Aufrufe von spooler_process() , ausgeführt hat. Weil Nicht-API-Tasks keine Schritte haben, zählt der
JobScheduler für sie immer einen Schritt.
yes entspricht 1, no entspricht 0.
Die Einstellung factory.ini (Abschnitt [job], Eintrag mail_on_process= 0) hat Vorrang.
mail_on_success = yes|no Erfolgreich gelaufende Task verschickt eMail
Die Einstellung factory.ini (Abschnitt [job], Eintrag mail_on_success= no) hat Vorrang.
mail_on_warning = yes|no Wenn eine Warnung ausgegeben worden ist, wird am Task-Ende eine eMail
verschickt
Software- und Organisations-Service GmbH
August 2014
92
Damit im Fehlerfall eine Mail verschickt wird, ist mail_on_error=yes explizit zu setzen.
mail_queue_dir = verzeichnis Verzeichnis der zeitweilig nicht versendbaren eMails
eMails, die der JobScheduler nicht verschicken kann (weil z.B. der SMTP-Server nicht erreichbar ist), werden hier
abgelegt.
Um diese eMails später zu verschicken, muss ein Job geschrieben werden, der die Methode Mail.dequeue()
aufruft.
Der allgemeine Platz für diese Einstellung ist sos.ini (Abschnitt [mail], Eintrag queue_dir= …).
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Die Einstellung factory.ini (Abschnitt [job], Eintrag mail_queue_dir= …) hat Vorrang.
Die Einstellung sos.ini (Abschnitt [mail], Eintrag queue_dir= …) wird damit überschrieben.
mail_queue_only = yes|no eMail nicht versenden, nur in die eMail-Warteschlange hängen
Wenn yes, dann werden eMails nicht versendet, sondern in die eMail-Warteschlange geschrieben, siehe sos.ini
(Abschnitt [mail], Eintrag queue_dir= …).
Der allgemeine Platz für diese Einstellung ist sos.ini (Abschnitt [mail], Eintrag queue_only= …).
Die Einstellung sos.ini (Abschnitt [mail], Eintrag queue_only= …) wird damit überschrieben.
max_db_errors = zahl Anzahl Datenbank-Fehler, bevor JobScheduler aufgibt
Der JobScheduler toleriert diese Anzahl Datenbankfehler. Wird sie überschritten, dann setzt er bei need_db=no
ohne Datenbank fort, anderfalls beendet er sich sofort.
Bei need_db= yes werden Fehler, die beim Versuch, die Datenbank zu öffnen, auftreten, nicht gezählt. Damit kann
er JobScheduler auf eine Datenbank warten, die noch nicht angelaufen ist.
need_db = yes|no|strict Ist die Datenbank notwendig?
need_db=no
Wenn die Einstellung db= fehlt, gibt der JobScheduler eine Warnung aus und arbeitet ohne Datenbank.
Wenn das Öffnen der Datenbank oder das automatische Anlegen der Tabellen fehlschlägt, gibt der
JobScheduler eine Warnung aus und arbeitet ohne Datenbank.
Bei einem Datenbankfehler während des Betriebs schließt der JobScheduler die Datenbank und öffnet sie
erneut. Wenn das fehlschlägt, arbeitet der JobScheduler ohne Datenbank weiter.
Im Cluster-Betrieb ( -exclusive oder -distributed-orders ) lehnt der JobScheduler need_db=no ab mit
der Meldung:
SCHEDUL This is a member
ER-358
of a cluster (option
-exclusive or
-distributed-orders)
, and therefore
needs a database.
need_db= is not
allowed
Software- und Organisations-Service GmbH
August 2014
93
need_db=yes
Wenn die Einstellung db= fehlt, startet der JobScheduler nicht und gibt die Meldung aus.
Bei einem Datenbankfehler schließt der JobScheduler die Datenbank und öffnet sie erneut. Wenn das
fehlschlägt, versucht der JobScheduler endlos im Abstand von einer Minute die Datenbank erneut zu öffnen.
Die Tasks werden währenddessen nicht bedient.
Wenn sich die Datenbank nicht erneut öffnen lässt, schickt er eine eMail (Seite 169).
need_db=strict
Wie need_db=yes mit folgender Ausnahme.
Bei einem Datenbankfehler während des Betriebs schließt der JobScheduler die Datenbank und öffnet sie
erneut. Bei einem erneuten Fehler wiederholt der JobScheduler den Versuch so oft, wie mit
max_db_errors= eingestellt. Wenn das fehlschlägt, beendet sich der Scheduler.
order_history = yes_no Aufträge in die Historie schreiben?
Für die Aufträge gibt es eine eigene Historie.
order_history_with_log = yes|no|gzip Auftragsprotokolle in die Historie schreiben?
Der JobScheduler kann das Auftragsprotokoll in die Datenbank schreiben, auch mit gzip komprimiert.
Siehe Kommando <show_order what="log"> (Seite 202).
param = text Zur freien Verwendung
Zur freien Verwendung. Der Parameter ist in den Skripten über spooler.param lesbar.
Die Option -param hat Vorrang.
smtp = host_address Hostname oder IP-Nummer des SMTP-Servers für eMail Versand
Der allgemeine Platz für diese Einstellung ist sos.ini (Abschnitt [mail], Eintrag smtp= …).
Die Einstellung factory.ini (Abschnitt [job], Eintrag smtp= …) hat Vorrang.
Die Einstellung sos.ini (Abschnitt [mail], Eintrag smtp= …) wird damit überschrieben.
subprocess.own_process_group = yes|no Subprozesse in eigener Prozessgruppe starten
Voreinstellung für Subprocess.own_process_group
1.5 Datei sos.ini
In der Datei sos.ini wird der SOS-Lizenzschlüssel eingetragen.
Außerdem können hier allgemeine Einstellungen für Java oder Mail stehen. Einstellungen für Java sind auch in der
Datei factory.ini, Abschnitt [java] (Seite 87) möglich.
Beim Aufruf des Schedulers können Sie den Pfad dieser Datei mit der Option -sos.ini angeben, z.B.:
…scheduler installation path…\bin\scheduler.exe
-sos.ini=C:/Programme/scheduler/config/sos.ini
Software- und Organisations-Service GmbH
August 2014
94
Bei der Installation durch den Scheduler-Setup wird die Datei sos.ini im Verzeichnis
…scheduler installation path…\config
abgelegt. Aufrufe über das Startskript setzen den Pfad automatisch richtig.
Sollen Einstellungen aus sos.ini neben dem JobScheduler auch für andere SOS-Produkte gelten, kann diese
Ini-Datei zentral abgelegt werden.
Falls beim Scheduler-Aufruf der Pfad zur Datei sos.ini nicht angegeben wird, gelten folgende Vorgaben:
Unter Windows sollte die Datei dort angelegt werden, wo Windows seine .ini-Dateien erwartet. Das ist
normalerweise im Verzeichnis c:\windows. Sonst wird die Datei im Heimverzeichnis des Benutzers erwartet.
Einstellungen
Sektion: java
class_path =
debug = yes_no
debug=yes lässt die Aufruf an Java ins scheduler.log protokollieren Außerdem versetzt die Einstellung Java in
den Debug-Modus, wodurch z.B. bei einer Exception der Aufruf-Stack nach stdout (oder stderr) geschrieben wird.
javac = path Pfad zum Java-Compiler
Wenn zum Entwickeln von Java-Jobs der Quell-Code direkt in <script> notiert wird, übersetzt der JobScheduler
mit dem hier eingestellten Java-Compiler.
options = text
vm = path Dateipfad der Java virtual machine
Voreingestellt ist für HP-UX jvm.sl und für andere Unix-Varianten jvm.so.
Die Voreinstellung für Windows wird aus der Registrierung gelesen. Aus dem Schlüssel
HKEY_LOCAL_MACHINE\software\JavaSoft\Java Runtime Environment
wird der Eintrag CurrentVersion gelesen, der die aktuelle Versionsnummer enthält, z.B. "1.5". Anschließend wird
der Schlüssel der Version gelesen, z.B.
HKEY_LOCAL_MACHINE\software\JavaSoft\Java Runtime Environment\1.5
und dem dortigen Eintrag RuntimeLib der Pfad der jvm.dll entnommen.
Sektion: licence
key1 = licence_key Lizenzschlüssel
Wenn Sie mehrere Lizenzschlüssel haben, können Sie weitere unter key2=, key3= usw. eintragen. Achten Sie
darauf, dass die Nummerierung lückenlos ist.
Siehe auch <licence.use> (Seite 184).
Sektion: mail
queue_dir = verzeichnis Verzeichnis der zeitweilig nicht versendbaren eMails
Software- und Organisations-Service GmbH
August 2014
95
eMails, die der JobScheduler nicht verschicken kann (weil z.B. der SMTP-Server nicht erreichbar ist), werden hier
abgelegt.
Um diese eMails später zu verschicken, muss ein Job geschrieben werden, der die Methode Mail.dequeue()
aufruft.
Der allgemeine Platz für diese Einstellung ist sos.ini (Abschnitt [mail], Eintrag queue_dir= …).
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Die Einstellung factory.ini (Abschnitt [job], Eintrag mail_queue_dir= …) hat Vorrang.
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag mail_queue_dir= …) hat Vorrang.
queue_only = yes|no eMail nicht versenden, nur in die eMail-Warteschlange hängen
Wenn yes, dann werden eMails nicht versendet, sondern in die eMail-Warteschlange geschrieben, siehe sos.ini
(Abschnitt [mail], Eintrag queue_dir= …).
Der allgemeine Platz für diese Einstellung ist sos.ini (Abschnitt [mail], Eintrag queue_only= …).
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag mail_queue_only= …) hat Vorrang.
smtp = host_address Hostname oder IP-Nummer des SMTP-Servers für eMail Versand
Der allgemeine Platz für diese Einstellung ist sos.ini (Abschnitt [mail], Eintrag smtp= …).
Die Einstellung factory.ini (Abschnitt [job], Eintrag smtp= …) hat Vorrang.
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag smtp= …) hat Vorrang.
1.6 Einstellungen, die den Abruf von Umgebungsvariablen mit ${…} erlauben
In manchen XML-Attributen und .ini-Dateieinträgen können Umgebungsvariablen mit der Syntax ${ name }
abgerufen werden. Die Kurzform $ name ist auch möglich, wenn auf dem Variablennamen ein Sonderzeichen
(außer dem Unterstrich _) folgt.
Das Zeichen »$« bleibt stehen, wenn kein »{« oder Buchstabe folgt. Ebenso, wenn ein »\« vorangestellt ist: »\$«
liefert »$«.
Es gelten die Werte der Umgebungsvariablen vom Start des Schedulers.
Variablen können auch programmiert ersetzt werden mit Variable_set.substitute() .
Beispiel:
# File factory.ini
[java]
class_path = ${SCHEDULER_HOME}/lib/sos.spooler.jar
class_path = $SCHEDULER_HOME/lib/sos.spooler.jar
class_path = \\otherhost\C$\lib\classes.jar
<params>
<param name="txt_file_regex" value="\.txt$"/>
</params>
Software- und Organisations-Service GmbH
August 2014
96
1.6.1
<base file="…">
Basiskonfiguration <config include_path="…">
Konfiguration, Verzeichnispfad für <include> <file_order_sink move_to="…">
Dateiauftragssenke <file_order_source directory="…">
Dateiauftragsquelle <http_directory path="…">
HTTP-Dateiverzeichnis, Pfad des Dateisystems <include file="…">
Fügt Text aus einer Datei ein, Pfad der einzufügenden
Datei <include live_file="…">
Fügt Text aus einer Datei ein, Pfad der einzufügenden
Datei aus dem Konfigurationsverzeichnis <param value="…">
Ein Parameter <process file="…">
Externes Programm (alternativ zu <script>), Pfad des
auszuführenden Programms <process param="…">
Externes Programm (alternativ zu <script>),
Parameterzeile <process log_file="…">
Externes Programm (alternativ zu <script>) <start_when_directory_changed directory="…">
Verzeichnis überwachen <variable value="…">
Eine Variable, Wert der Umgebungsvariablen <web_service url_path="…">
Web-Dienst, URL-Pfad, unter dem der Web-Dienst
ansprechbar ist <web_service request_xslt_stylesheet="…">
Web-Dienst, Transformiert die Anforderung in ein
Scheduler-Kommando <web_service response_xslt_stylesheet="…">
Web-Dienst, Transformiert die Antwort des Kommandos
in die Antwort des Web-Dienstes <web_service forward_xslt_stylesheet="…">
Web-Dienst, Zur Weiterleitung am Ende des Auftrags
bzw. der Task 1.6.2 factory.ini
[spooler] factory.ini (Abschnitt [spooler],
Eintrag html_dir= …)
Verzeichnis der HTML-Dateien [spooler] factory.ini (Abschnitt [spooler],
Eintrag include_path= …)
Verzeichnispfad für <include> [spooler] factory.ini (Abschnitt [spooler],
Eintrag log_dir= …)
Verzeichnis der Protokolle [spooler] factory.ini (Abschnitt [spooler],
Eintrag mail_queue_dir= …)
Verzeichnis der zeitweilig nicht versendbaren eMails [job] factory.ini (Abschnitt [job], Eintrag
mail_queue_dir= …)
Verzeichnis der zeitweilig nicht versendbaren eMails [java] factory.ini (Abschnitt [java], Eintrag
class_path= …)
Für Java Software- und Organisations-Service GmbH
August 2014
97
1.6.3 sos.ini
[mail] sos.ini (Abschnitt [mail], Eintrag
queue_dir= …)
Verzeichnis der zeitweilig nicht versendbaren eMails 1.7 Der Scheduler von der Kommandozeile
Der JobScheduler kann durch einen einfachen Aufruf gestartet werden:
C:\>…scheduler installation path…\bin\scheduler.exe …\my_scheduler_configuration.xml
…
user@host:~>…installation path…/bin/scheduler …/my_scheduler_configuration.xml …
Die Parameter (rechts vom Gleichheitszeichen) der hier beschriebenen Kommandozeilenoptionen können in
Anführungszeichen oder in Apostrophe gesetzt werden.
Das
Installationsprogramm erzeugt das Startskript .\bin\jobscheduler.cmd (Windows) bzw.
./bin/jobscheduler.sh (Unix), in dem Kommandozeilenoptionen und Umgebungsvariablen bereits gesetzt
werden. Das Startskript kann bei Bedarf angepasst werden.
Startskript und Umgebungsvariablen sind im Handbuch »Installation und Konfiguration« beschrieben.
Folgende Varianten des Aufrufs werden unterschieden:
•
Start des JobSchedulers
•
Installation eines Windows-Dienstes
•
Laufendem JobScheduler einen Job übergeben
•
Laufendem JobScheduler einen Auftrag übergeben
•
XML-Kommando an laufenden JobScheduler übergeben
•
Laufenden JobScheduler mit kill abbrechen
•
Java-Classpath expandieren
•
Versionsnummer zeigen
Start des JobSchedulers
scheduler
-backup
-backup-precedence=integer
-cd=verzeichnis
-cmd=xmlkommando
-config=dateiname
-distributed-orders
-env=name=value
-exclusive
-id=scheduler_id
-include-path=verzeichnis
-ini=dateiname
-ip-address=ip_number
Startet den JobScheduler im Backup-Betrieb
(Initialwert: 1) Vorrang unter den Backup JobSchedulern
Arbeitsverzeichnis
Sofort auszuführendes Kommando
Konfigurationsdatei
Verteilte Aufträge
Umgebungsvariable setzen
Startet den JobScheduler für die exklusive Ausführung
Kennung des JobSchedulers
Verzeichnispfad für <include>
Anderer Pfad/ Name für Datei factory.ini
(Initialwert: 0.0.0.0) IP-Adresse der Schnittstelle für TCP
und UDP
-java-classpath=dateinamen
Java-Classpath für den JobScheduler
-java-options=text
Java-Optionen für den JobScheduler
-job-java-classpath=dateinamen Java-Classpath für Jobs
-job-java-options=text
Java-Optionen für Jobs
Software- und Organisations-Service GmbH
August 2014
98
-log-dir=verzeichnis
-log-level=log_level
-log=dateiname
-param=text
-pid-file=dateiname
-port=number
-program-file=dateiname
-reuse-port
-service
-sos.ini=dateiname
-tcp-port=number
-time-zone=text
-udp-port=number
-use-xml-schema=dateiname
-validate-xml
Verzeichnis der Protokolle
(Initialwert: info) Protokollausgaben beschränken
Dateiname des Protokolls scheduler.log
Zur freien Verwendung
Dateiname für Prozess-ID
(Initialwert: 0) HTTP-, TCP- und UDP-Port für
Kommandos an den JobSchedulers
Dateiname des Schedulers
TCP- und UDP-Port wiederverwenden
Als Daemon starten
Anderer Pfad/ Name für Datei sos.ini
(Initialwert: 0) HTTP- und TCP-Port für Kommandos an
den JobScheduler
Zeitzone des JobSchedulers
(Initialwert: 0) UDP-Port für Kommandos an den
JobScheduler
Schema für die Validierung der JobScheduler Konfiguration
XML-Dokumente gegen eingebettetes Schema validieren
Der Programmdateiname scheduler muss absolut und vollständig angegeben werden. Für Windows muss die
Endung ".exe" angegeben werden, da der JobScheduler den vollständigen Dateinamen benötigt, um einen Job
oder sich selbst neu zu starten.
Beispiel:
c:\bin\scheduler.exe c:\scheduler\config.xml -log-dir=c:\scheduler\logs
Installation eines Windows-Dienstes
scheduler
-install-service=name
-remove-service=name
-service-name=name
-service-display=text
-service-descr=text
-need-service=name
Als Windows-Dienst installieren
Windows-Dienst entfernen
(Initialwert: sos_scheduler) Interner Name des
Windows-Dienstes
Angezeigter Name des Windows-Dienstes
Beschreibung des Windows-Dienstes
Vom JobScheduler vorausgesetzter Dienst
Laufendem JobScheduler einen Job übergeben
scheduler
-scheduler=host:port
-log=dateiname
-process-class=name
-language=script_language
-at=yyyy-mm-dd HH:MM
TCP-Adresse des Schedulers
Dateiname des Protokolls scheduler.log
(Initialwert: shell) Skriptsprache des Jobs
(Initialwert: now) Startzeitpunkt
Dem mit -scheduler =host:port adressierten JobScheduler wird ein temporärer Job übergeben.
Bei einem Neustart des JobSchedulers geht der Job verloren.
Software- und Organisations-Service GmbH
August 2014
99
Beispiel:
echo ls -l | scheduler -scheduler=localhost:4444 -at="2006-04-04 12:00"
Laufendem JobScheduler einen Auftrag übergeben
scheduler
-scheduler
-log
-job-chain=name
-order-id=id
-title=text
Job-Kette
Kennung des Auftrags
Titel des Auftrags
Dem mit -scheduler =host:port adressierten JobScheduler wird ein Auftrag übergeben.
Die Parameter des Auftrags (s. Order.payload ) können an der Kommandozeile in der Form name = value
übergeben werden.
Beispiel:
scheduler -scheduler=localhost:4444 -job-chain=my_job_chain -order-id=123 city=Berlin
phone="+4930 864790-0"
XML-Kommando an laufenden JobScheduler übergeben
scheduler
-tcp-port
-send-cmd=xmlkommando
Anderem JobScheduler zu schickendes Kommando
Laufenden JobScheduler mit kill abbrechen
scheduler
-kill
-kill=pid
-pid-file=dateiname
Laufenden JobScheduler mit kill abbrechen
Laufenden JobScheduler mit kill abbrechen
Beispiel:
scheduler -kill -pid-file=/home/scheduler/scheduler.pid
Java-Classpath expandieren
scheduler
-expand-classpath
Java-Classpath expandieren
Versionsnummer zeigen
scheduler
-V
Software- und Organisations-Service GmbH
Versionsnummer zeigen
August 2014
100
-?
-h
Optionen zeigen
Optionen zeigen
Optionen
-backup Startet den JobScheduler im Backup-Betrieb
Nur mit -exclusive möglich.
Ein Backup JobScheduler übernimmt den Betrieb nur, beginnt aber keinen neuen Betrieb. D.h. nach <
terminate continue_exclusive_operation="no"> läuft er nicht an, sondern wartet auf einen anderen
JobScheduler, der den Betrieb startet.
Zusammem mit -install-service und -remove-service führt -backup zu einem eigenen Dienstenamen, so
dass der Backup JobScheduler als eigener Dienst auf demselben Rechner installiert werden kann.
Der Dateiname des Hauptprotokolls (Seite 168) erhält den Zusatz "_backup".
-backup-precedence=integer (Initialwert: 1) Vorrang unter den Backup JobSchedulern
Nur mit -exclusive möglich.
Wenn mehrere inaktive Backup JobScheduler einen ausgefallenen JobScheduler ersetzen können, übernimmt
der mit dem kleinsten Wert von -backup-precedence .
Wenn die Uhren nicht gleichlaufen, kann ein anderer JobScheduler als der mit dem vorderen Rang den
Betrieb übernehmen.
Mit der Option -backup ist die Voreinstellung 1, sonst 0.
-cd=verzeichnis Arbeitsverzeichnis
Ändert das Arbeitsverzeichnis.
-cmd=xmlkommando Sofort auszuführendes Kommando
Der JobScheduler führt beim Start das XML-Kommando aus. Das kann z.B. ein <start_job> sein.
-config=dateiname Konfigurationsdatei
Gibt die Konfigurationsdatei (Seite 7) an.
"-config=" vor dem Dateinamen kann weggelassen werden.
Die Option gibt die Konfigurationsdatei oder das Konfigurationsverzeichnis an. Im letzteren Fall erwartet der
JobScheduler die Konfigurationsdatei im Konfigurationsverzeichnis unter dem Namen scheduler.xml.
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag config= …) wird damit überschrieben.
-distributed-orders Verteilte Aufträge
Voraussetzung ist Datenbankbetrieb (). Mehrere JobScheduler mit derselben Scheduler-Id ( -id ), derselben
Datenbank und derselben Konfiguration können gestartet werden, die sich die Ausführung der Aufträge teilen.
Mit <job_chain distributed="yes"> lassen sie eine Job-Kette für den verteilten Betrieb zu.
Meldungen
[ERROR]
SCHEDULER-357
Software- und Organisations-Service GmbH
This is a member of a cluster (option -exclusive or -distributed-orders), and
therefore needs a database August 2014
101
[ERROR]
SCHEDULER-358
This is a member of a cluster (option -exclusive or -distributed-orders), and
therefore needs a database. need_db= is not allowed [ERROR]
SCHEDULER-361
No database [ERROR]
SCHEDULER-370
Operation can only be performed on a distributed orders Scheduler [ERROR]
SCHEDULER-373
UNEXPECTED DEACTIVATION BY JOBSCHEDULER MEMBER [ERROR]
SCHEDULER-375
Order is distributed and therefore does not support operation '' [ERROR]
SCHEDULER-378
After own late heart beat, this JobScheduler has been deactivated and the
occupied orders have been freed by JobScheduler member '' [ERROR]
SCHEDULER-379
order is occupied by JobScheduler member '' [ERROR]
SCHEDULER-380
job_chain orders_recoverable="no" cannot be combined with
distributed="yes", in [ERROR]
SCHEDULER-384
job_chain is distributed and therefore does not support operation '' [ERROR]
SCHEDULER-385
Deletion of order in database has failed [warn]
SCHEDULER-812
Just before processing, order record in database has been occupied or
removed [warn]
SCHEDULER-816
Unable to release occupation in database [warn]
SCHEDULER-817
Missing order record in database [warn]
SCHEDULER-879
Deactivating old cluster member with same ID [info]
SCHEDULER-813
Order is occupied by JobScheduler '' [info]
SCHEDULER-815
Task should end but it has just been started with an order attached, so one
step will be done [info]
SCHEDULER-829
Releasing occupied order job_chain:id [info]
SCHEDULER-830
Because all JobScheduler tasks have been killed, the order in database has
not been updated. Only the occupation has been released -env=name=value Umgebungsvariable setzen
-env=NAME=VALUE setzt die Umgebungsvariable NAME.
Meldungen
[ERROR]
SCHEDULER-318
Option -env=NAME=VALUE: missing '=' between name and value: -env="" -exclusive Startet den JobScheduler für die exklusive Ausführung
Voraussetzung ist Datenbankbetrieb, siehe factory.ini (Abschnitt [spooler], Eintrag db= …) (Seite 87).
Mehrere JobScheduler mit derselben Scheduler-Id ( -id ) und derselben Datenbank können mit -exclusive
gestartet werden, wobei nur einer aktiv wird. Erst wenn der aktive JobScheduler ausfällt oder einzeln beendet
wird ( <terminate continue_exclusive_operation="yes"> ), wird ein anderer JobScheduler aktiv. Die
Übernahme kann einige Minuten dauern.
Vorsicht: Alle beteiligten JobScheduler müssen mit -exclusive oder -distributed-orders gestartet werden.
Wenn ein JobScheduler mit und einer ohne die Einstellung gestartet wird, laufen zwei JobScheduler
gleichzeitig, was zu unerwarteten Ergebnissen führen kann.
Siehe auch -backup .
Meldungen
Software- und Organisations-Service GmbH
August 2014
102
[ERROR]
SCHEDULER-357
This is a member of a cluster (option -exclusive or -distributed-orders), and
therefore needs a database [ERROR]
SCHEDULER-358
This is a member of a cluster (option -exclusive or -distributed-orders), and
therefore needs a database. need_db= is not allowed [ERROR]
SCHEDULER-359
For an exclusive or distributed Scheduler, the database is not supported [ERROR]
SCHEDULER-362
Scheduler is aborting because it has become inactive [ERROR]
SCHEDULER-365
Illegal character in -id= [ERROR]
SCHEDULER-367
Scheduler is aborting because it has lost its exclusivity [ERROR]
SCHEDULER-371
DATABASE INTEGRITY IS BROKEN [ERROR]
SCHEDULER-372
Exclusivity has been stolen by JobScheduler member '' [ERROR]
SCHEDULER-377
After own late heart beat, JobScheduler member '' has taken exclusiveness [ERROR]
SCHEDULER-381
Scheduler is not yet active and cannot execute the operation [ERROR]
SCHEDULER-386
Last heart beat was time, seconds ago. Something is delaying JobScheduler
execution, the JobScheduler is aborted immediately [warn]
SCHEDULER-823
Dead JobScheduler member 'cluster_member_id' has resurrected [warn]
SCHEDULER-827
Own heart beat is late: next_heart_beat has been announced for (this is
seconds late) [warn]
SCHEDULER-836
Deactivating that dead Scheduler [warn]
SCHEDULER-837
Taking exclusiveness from that Scheduler [warn]
SCHEDULER-994
No heart beat for seconds (time), expecting heart beat within seconds [warn]
SCHEDULER-996
No heart beat for seconds (time) - JobScheduler seems to be dead [warn]
SCHEDULER-997
Making up an extra heart beat [info]
SCHEDULER-805
No JobScheduler is active [info]
SCHEDULER-807
Using database product [info]
SCHEDULER-811
Executing command read from database: [info]
SCHEDULER-814
Inactive JobScheduler '' has the higher backup precedence (http_url) [info]
SCHEDULER-819
Scheduler becomes active [info]
SCHEDULER-820
Watching heart beat of that Scheduler [info]
SCHEDULER-821
Scheduler member 'cluster_member_id' seems to be active, claiming its last
heart beat was s ago (pid=, url) [info]
SCHEDULER-822
Scheduler member 'cluster_member_id' seems to be exclusive, claiming its
last heart beat was s ago (pid=, url) [info]
SCHEDULER-825
No exclusive JobScheduler is running [info]
SCHEDULER-826
That JobScheduler has terminated [info]
SCHEDULER-831
Waiting s for start of non-backup Scheduler [info]
SCHEDULER-832
This is a backup Scheduler, waiting for a non-backup Scheduler [info]
SCHEDULER-833
Watching heart beat of that exclusive Scheduler, standing by to take over
operation [info]
SCHEDULER-834
Active JobScheduler has terminated properly [info]
SCHEDULER-835
This JobScheduler is becoming exclusive now Software- und Organisations-Service GmbH
August 2014
103
[info]
SCHEDULER-838
. heart beat detected [info]
SCHEDULER-995
No heart beat for seconds (time), ignored for seconds because of recent
database reconnect -id=scheduler_id Kennung des JobSchedulers
Der JobScheduler wählt nur die Elemente der XML-Konfiguration aus, deren Attribut spooler_id leer ist oder
denselben Wert wie in dieser Einstellung enthält.
Wenn die Scheduler-ID nicht angegeben ist, beachtet der JobScheduler das XML-Attribut spooler_id= nicht
und wählt alle Elemente der XML-Konfiguration aus.
Siehe z.B. <config> (Seite 20).
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag id= …) wird damit überschrieben.
-include-path=verzeichnis Verzeichnispfad für <include>
Verzeichnis der Dateien, die mit <include> eingezogen werden.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag include_path= …) wird damit überschrieben.
<config include_path="…"> wird damit überschrieben.
-ini=dateiname Anderer Pfad/ Name für Datei factory.ini
Wählt eine andere Datei für die Datei factory.ini (Seite 84) aus.
In dieser Dokumentation ist dann mit der Datei factory.ini die hier eingestellte gemeint.
Siehe auch Spooler.ini_path
-ip-address=ip_number (Initialwert: 0.0.0.0) IP-Adresse der Schnittstelle für TCP und UDP
Die IP-Adresse, an die TCP- und UDP-Port gebunden werden. Der JobScheduler ist dann nur über diese
IP-Adresse erreichbar.
Ein Hostname kann angegeben werden.
Default ist 0.0.0.0, was für alle IP-Adressen steht.
Wenn eine andere IP-Adresse als 127.0.0.1 oder localhost angegeben ist, kann der JobScheduler nicht über
localhost erreicht werden.
<config ip_address="…"> wird damit überschrieben.
-java-classpath=dateinamen Java-Classpath für den JobScheduler
Für Java kann hier der CLASS_PATH eingestellt werden. Das ist eine Liste von Pfaden, in Windows durch
Semikolons (;), in Unix durch Doppelpunkte getrennt.
In den einzelnen Pfaden können Joker benutzt werden. Der JobScheduler ersetzt diese Pfade durch die
tatsächlichen, im Dateisystem vorhandenen.
•
•
•
Unter Windows sind hinter dem letzten Verzeichnisstrich die Zeichen * und ? möglich.
Unter Unix außerdem die Zeichen [ und ]; die Joker können auch in jedem Verzeichnis des Pfads
auftreten (wie in der Shell csh).
Linux (Gnu) kennt außerdem die Zeichen {,} in der Syntax "xxx { alternative1 , alternative2 ,...} xxx",
z.B. /dir/sos.{hostware,mail.spooler}.jar.
Software- und Organisations-Service GmbH
August 2014
104
Dabei gilt für jeden Pfad in class_path:
•
•
•
•
•
Ein Pfad ohne Joker wird unverändert an Java übergeben.
Ein Pfad mit Joker wird in die tatsächlichen, im Dateisystem vorhandenen Pfade aufgelöst.
Wenn auf den Pfad mit Joker kein tatsächlicher Pfad passt, wird er ignoriert.
Wenn ein Pfad mit ein nicht lesbares Verzeichnis bezeichnet, wird es ignoriert.
Umgebungsvariablen (z.B. ${HOME}) werden vorher ersetzt.
Der allgemeine Platz für diese Einstellung ist sos.ini (Abschnitt [java], Eintrag class_path= …).
Beispiel:
scheduler -java-classpath = s:\prod\bind\sos.*.jar;c:\jar\my.jar;c:\jar\*
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
-java-options=text Java-Optionen für den JobScheduler
Hier können Sie z.B. mit -Djava.library.path= das Verzeichnis angeben, in dem HostJava installiert ist.
Die Optionen werden der Java Virtual Machine übergeben.
Der allgemeine Platz für diese Einstellung ist sos.ini (Abschnitt [java], Eintrag options= …).
Beispiel:
options = -Xdebug -Djava.library.path=s:/prod/bind
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
-job-java-classpath=dateinamen Java-Classpath für Jobs
Siehe -java-classpath
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
-job-java-options=text Java-Optionen für Jobs
Siehe -java-options
Siehe auch <job java-options="…"> (Seite 37).
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
-log-dir=verzeichnis Verzeichnis der Protokolle
In dieses Verzeichnis schreibt der JobScheduler seine Protokolle.
log_dir= *stderr lässt den JobScheduler die Protokollausgabe nach stderr (auf den Bildschirm) schreiben.
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag log_dir= …) wird damit überschrieben.
-log-level=log_level (Initialwert: info) Protokollausgaben beschränken
Legt fest, ab welcher Stufe der JobScheduler Protokollzeilen ausgibt. Jede Protokollzeile ist auf einer der
folgenden Stufen: error, warn, info, debug1 bis debug9 (debug1 ist dasselbe wie debug).
Die Einstellung factory.ini (Abschnitt [job], Eintrag log_level= info) wird damit überschrieben.
Software- und Organisations-Service GmbH
August 2014
105
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag log_level= info) wird damit überschrieben.
-log=dateiname Dateiname des Protokolls scheduler.log
Wenn diese Einstellung gesetzt ist, schreibt der JobScheduler ein detailliertes Protokoll zur Fehlerdiagnose in
die Datei. Geben Sie den Dateinamen absolut an (als vollständigen Pfad).
Ein Plus (+) direkt vor dem Dateinamen lässt ein vorhandenenes Protokoll fortsetzen. Sonst wird es
überschrieben.
Sie können das Protokoll mit Kategorien erweitern oder einschränken. Schreiben Sie die Namen der
Kategorien mit Zwischenräumen getrennt vor den Dateinamen, den Sie mit einem Größerzeichen (>) einleiten.
Hier ist die Liste der Kategorien (Seite 171).
Beispiel:
log = c:/tmp/scheduler.log
log = scheduler.wait >scheduler.log
log = scheduler.wait com_server.* >scheduler.log
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag log= …) wird damit überschrieben.
-param=text Zur freien Verwendung
Zur freien Verwendung. Der Parameter ist in den Skripten über spooler.param lesbar.
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag param= …) wird damit überschrieben.
-pid-file=dateiname Dateiname für Prozess-ID
Für Unix: In diese Datei schreibt der JobScheduler seine PID. Beim Beenden löscht der JobScheduler die
Datei.
-port=number (Initialwert: 0) HTTP-, TCP- und UDP-Port für Kommandos an den JobSchedulers
Fasst die Einstellungen tcp_port und udp_port zusammen.
Siehe auch -tcp-port und -udp-port .
Wenn der Port blockiert ist, versucht der JobScheduler zwei Minuten lang, ihn zu belegen, bevor er aufgibt.
<config port="…"> wird damit überschrieben.
-program-file=dateiname Dateiname des Schedulers
Beim Aufruf des JobSchedulers aus einer Java-Klasse heraus (zum Debuggen) geben Sie hier den
Programmdateinamen an, wenn der JobScheduler Jobs in eigenen Prozessen starten können soll.
-reuse-port TCP- und UDP-Port wiederverwenden
Die Option soll nur in Ausnahmefällen benutzt werden, sie schaltet die Prüfung ab, ob ein Port vom
Betriebssystem freigegeben ist.
Ruft setsockopt(socket,SOL_SOCKET,SO_REUSEADDR,true).
Die Option sollte nur im Notfall benutzt werden, falls das Betriebssystem den Port dauerhaft sperrt, obwohl
keine Anwendung ihn mehr belegt. Das kann unter Windows XP passieren, wenn die Anwendung mit einem
Debugger abgebrochen wird. Unix kann ggf. fast eine Minute benötigen, um einen Port freizugeben.
Software- und Organisations-Service GmbH
August 2014
106
U.U. ist der JobScheduler mit -reuse-port über TCP oder UDP nicht erreichbar, wenn statt dessen der Port
einer anderen Anwendung angesprochen wird.
-service Als Daemon starten
Unter Unix versetzt sich der JobScheduler in den Hintergrund und trennt sich vom Terminal.
Unter Unix schließt der JobScheduler stdin, stdout und stderr und leitet die Ausgaben in die Datei
scheduler.out, die beschreibbar sein muss.
-sos.ini=dateiname Anderer Pfad/ Name für Datei sos.ini
Wählt eine andere Datei für globale Konfigurationen sos.ini (Seite 93) aus. Diese Datei enthält u.a. den
Lizenzschlüssel.
-tcp-port=number (Initialwert: 0) HTTP- und TCP-Port für Kommandos an den JobScheduler
Der JobScheduler kann auf einem TCP-Port während des Betriebs Kommandos entgegennehmen. Hier kann
eine Portnummer eingestellt werden. Die Portnummer ist eine Zahl zwischen 2048 (betriebssystemabhängig)
und 65535. Die Voreinstellung lautet 4444.
Über denselben Port betreibt der JobScheduler einen HTTP/HTML-Server, so dass er über einen Browser
ansprechbar ist, z.B. http://localhost:4444.
Bei tcp_port=0 (voreingestellt) ist der JobScheduler nicht über TCP oder HTTP ansprechbar. Damit kann die
Steuerung des JobSchedulers per TCP-Kommando, z.B. über eine Web-Seite, unterbunden werden.
Siehe auch -port .
<config tcp_port="…"> wird damit überschrieben.
-time-zone=text Zeitzone des JobSchedulers
Bestimmt nach welcher Zeitzone ein Auftrag bzw. Job startet. Die Angabe einer Zeitzone folgt dabei der tz
Datenbank. Eine Liste möglicher Zeitzonen befindet sich in der Dokumentation der Joda API, welche für die
Zeitfunktionen verwendet wird.
Fehlt die Angabe einer Zeitzone, arbeitet der JobScheduler mit der locale Einstellung des Rechners.
Beispiel:
<config time_zone="Europe/Berlin">
<config time_zone="…"> wird damit überschrieben.
-udp-port=number (Initialwert: 0) UDP-Port für Kommandos an den JobScheduler
Auch über UDP kann der JobScheduler Kommandos entgegennehmen. Hier wird die Portnummer angegeben.
Ein Kommando muss in eine Nachricht passen. Der JobScheduler schickt keine Antwort.
Bei udp_port=0 (voreingestellt) öffnet der JobScheduler keinen UDP-Port.
Siehe auch -port .
<config udp_port="…"> wird damit überschrieben.
-use-xml-schema=dateiname Schema für die Validierung der JobScheduler Konfiguration
Mit dieser Option kann das durch den JobScheduler verwendete Schema überschrieben werden.
-validate-xml XML-Dokumente gegen eingebettetes Schema validieren
Software- und Organisations-Service GmbH
August 2014
107
-validate-xml- schaltet die Validierung ab (für den Fall, dass das Schema fehlerhaft ist).
-install-service=name Als Windows-Dienst installieren
Die Option startet nicht den JobScheduler, sondern installiert ihn als Windows-Dienst. Dabei werden folgende
Optionen aus der Kommandozeile übernommen:
-cd
-config
-id
-ini
-log
-pid-file
-sos.ini
-env
-install-service= name ist dasselbe wie -install-service -service-name= name.
-remove-service=name Windows-Dienst entfernen
Entfernt einen zuvor mit -install-service installierten Dienst.
-remove-service= name ist dasselbe wie -remove-service -service-name= name.
-service-name=name (Initialwert: sos_scheduler) Interner Name des Windows-Dienstes
Nur in Verbindung mit -install-service oder -remove-service. Wenn diese Option fehlt und -id=
angegeben ist, verwendet der JobScheduler den Namen sos_scheduler_ scheduler_id. Bei -backup fügt er
_backup hinzu.
-service-display=text Angezeigter Name des Windows-Dienstes
Nur in Verbindung mit -install-service. Die Dienstesteuerung von Windows zeigt diesen Namen. Er darf
Leerzeichen enthalten. Wenn die Option fehlt, erzeugt der JobScheduler einen aus dem Dienstnamen (s.
-service-name=).
-service-descr=text Beschreibung des Windows-Dienstes
Nur in Verbindung mit -install-service.
-need-service=name Vom JobScheduler vorausgesetzter Dienst
In Verbindung mit -install-service können Sie hier einen anderen Dienst angegeben, der laufen soll, bevor
Windows den JobScheduler Dienst startet. Das kann z.B. ein Datenbank-Server sein.
Diese Option kann wiederholt angegeben werden, wenn der JobScheduler mehrere Dienste voraussetzt.
-scheduler=host:port TCP-Adresse des Schedulers
Rechnername (oder IP-Nummer) und Portnummer des anzusprechenden JobSchedulers.
-log=dateiname Dateiname des Protokolls scheduler.log
Wenn diese Einstellung gesetzt ist, schreibt der JobScheduler ein detailliertes Protokoll zur Fehlerdiagnose in
die Datei. Geben Sie den Dateinamen absolut an (als vollständigen Pfad).
Software- und Organisations-Service GmbH
August 2014
108
Ein Plus (+) direkt vor dem Dateinamen lässt ein vorhandenenes Protokoll fortsetzen. Sonst wird es
überschrieben.
Sie können das Protokoll mit Kategorien erweitern oder einschränken. Schreiben Sie die Namen der
Kategorien mit Zwischenräumen getrennt vor den Dateinamen, den Sie mit einem Größerzeichen (>) einleiten.
Hier ist die Liste der Kategorien (Seite 171).
Beispiel:
log = c:/tmp/scheduler.log
log = scheduler.wait >scheduler.log
log = scheduler.wait com_server.* >scheduler.log
Die Einstellung factory.ini (Abschnitt [spooler], Eintrag log= …) wird damit überschrieben.
-process-class=name
Name der Prozessklasse für den temporären Job, siehe <job process_class="…"> (Seite 37).
-language=script_language (Initialwert: shell) Skriptsprache des Jobs
Skriptsprache, siehe <script language="…"> (Seite 66).
-at=yyyy-mm-dd HH:MM (Initialwert: now) Startzeitpunkt
Startzeitpunkt in der Form "yyyy-mm-dd HH:MM[:SS]". Siehe <at at="…"> (Seite 16).
Der Job wird nicht gestartet, wenn der Startzeitpunkt in der Vergangenheit liegt.
Maßgeblich ist die Uhr des Rechners, auf dem der JobScheduler läuft.
-at=now ist voreingestellt und lässt den Job sofort starten.
-scheduler
-log
-job-chain=name Job-Kette
Name der Job-Kette für den Auftrag, siehe <add_order job_chain="…"> (Seite 14).
-order-id=id Kennung des Auftrags
Kennung des Auftrags, siehe <add_order id="…"> (Seite 14).
-title=text Titel des Auftrags
Dem Auftrag kann ein Titel gegeben werden. Siehe <add_order title="…"> (Seite 14).
-tcp-port
-send-cmd=xmlkommando Anderem JobScheduler zu schickendes Kommando
Mit dieser Option startet der JobScheduler nicht, sondern schickt einem anderen JobScheduler mit gleicher
Option -tcp-port= auf demselben Rechner das XML-Kommando. Das kann z.B. ein <terminate> sein:
-send-cmd="<terminate/>"
Das Kommando wird an die mit <config ip_address="…"> eingestellte IP-Adresse geschickt, oder, wenn
diese fehlt, an 127.0.0.1.
-kill Laufenden JobScheduler mit kill abbrechen
Software- und Organisations-Service GmbH
August 2014
109
Bricht den JobScheduler mit kill -SIGKILL ab, dessen Prozess-Id in der mit -pid-file angegebenen Datei
steht.
-kill=pid Laufenden JobScheduler mit kill abbrechen
Bricht den Prozess mit der PID mit kill -SIGKILL ab.
-pid-file=dateiname
-expand-classpath Java-Classpath expandieren
Expandiert den als Parameter angegebenen Java-Classpath, d.h. die Joker werden verarbeitet wie sos.ini
(Abschnitt [java], Eintrag class_path= …).
Das Ergebnis schreibt der JobScheduler nach stdout. Wenn keine weiteren Optionen es verlangen, beendet
sich der JobScheduler ohne weitere Ausgaben.
Beispiel:
export CLASSPATH="`scheduler -expand-classpath='/opt/java/lib/*.jar'`"
-V Versionsnummer zeigen
Lässt den JobScheduler beim Start Versionsnummer und Versionsdatum ausgeben.
-? Optionen zeigen
Zeigt die Kommandozeilenoptionen.
-h Optionen zeigen
Zeigt die Kommandozeilenoptionen.
1.8 JobScheduler Editor
1.8.1 GUI für Konfiguration und Dokumentation
Der JobScheduler liest seine Konfiguration aus XML-Dateien, die mit einem Text-Editor erstellt und bearbeitet
werden können.
Alternativ kann die XML-Konfiguration mit dem JobScheduler Editor gepflegt werden. Der Editor stellt eine
grafische Benutzeroberfläche mit Formularen für alle Elemente der Scheduler-Konfiguration zur Verfügung.
Anwender werden durch Tooltips und Wizards unterstützt.
Der JobScheduler Editor erzeugt für jeden Eintrag in eines seiner Formulare das entsprechende XML-Element der
Scheduler-Konfiguration. Beim Speichern wird jeweils die Konfigurationsdatei des Schedulers, in der Regel die
Datei scheduler.xml, neu geschrieben. Der Editor validiert alle Einträge mit dem aktuellen Schema des Schedulers
- Fehler in der XML-Konfiguration werden sofort bemerkt.
Scheduler Jobs können mit dem Editor dokumentiert werden - der Editor generiert die Dokumentation in einem
XML-Format, das über ein entsprechendes Stylesheet als HTML mit Navigationselementen im Browser dargestellt
werden kann.
Software- und Organisations-Service GmbH
August 2014
110
1.8.1.1 Aufruf JobScheduler Editor
Der JobScheduler Editor gehört zur Standard-Auslieferung des JobSchedulers. Das Installationsverzeichnis des
Schedulers enthält die Datei bin/jobeditor.cmd zum Aufruf des Editors. In dieser Datei ist für INSTALL_PATH das
Scheduler-Installationsverzeichnis einzutragen.
1.8.1.2 Scheduler Konfiguration erstellen
Um eine neue Konfiguration zu erstellen, wählen Sie den Menüpunkt File/New/Configuration:
Der Editor öffnet sein Hauptfenster mit einer Baumansicht für einzelne Elemente, z.B. Config, Jobs, Job Chains
etc.
Software- und Organisations-Service GmbH
August 2014
111
Für alle Formularfelder und Steuerelemente sind Tooltips verfügbar. Mit der Taste F1 wird als Hilfe die
XML-Dokumentation des Schedulers angezeigt, die Hilfe ist auf den Kontext bezogen und steuert das
XML-Element an, das gerade im Formular bearbeitet wird.
Ein Beispiel:
Das Formular zur Konfiguration eines Jobs ist geöffnet:
Software- und Organisations-Service GmbH
August 2014
112
Mit F1 erreichen Sie die Dokumentation des XML-Elements <job>:
Software- und Organisations-Service GmbH
August 2014
113
1.8.1.3 Vorhandene Konfigurationsdatei öffnen
Existierende Konfigurationsdateien öffnen Sie mit dem Menüpunkt File/Open:
Beispiel - Öffnen der Datei scheduler.xml aus der Auslieferung, Ansicht der Base-File Konfiguration:
Software- und Organisations-Service GmbH
August 2014
114
1.8.1.4 Empfohlene Vorgehensweise
•
•
•
•
•
Öffnen Sie die Konfigurationsdatei scheduler.xml der Auslieferung.
Tragen Sie im Formular Security die Rechner bzw. Netzwerke ein, die per TCP und UDP Kommandos
ausführen dürfen.
Tragen Sie im Formular Jobs die Jobs mit den Job-Parametern ein, die der JobScheduler ausführen soll. Der
Editor erstellt für jeden Job einen Zweig in der Baumansicht aller Jobs. Jeder Job hat zusätzliche Formulare,
in die weitere Eigenschaften, z.B. der auszuführende Programm-Code, die Startzeiten etc. einzutragen sind.
Sie können zum Erstellen eines Jobs auf Basis eines Standard-Jobs auch den Job Wizard verwenden.
Hinweis: wenn Jobs in XML-Dateien definiert werden sollen, die mit <base> inkludiert werden, ist die
inkludierte XML-Datei mit den Job-Definitionen im Editor zu öffnen.
Wenn Jobs innerhalb einer Job-Kette ausgeführt werden sollen, tragen Sie die Job-Kette im Formular Job
Chains ein. Für jede Job-Kette sind die einzelnen Job-Ketten-Knoten zu definieren. Jedem Job-Ketten-Knoten
ist ein Job zuzuordnen.
Hinweis: wenn Job-Ketten in XML-Dateien definiert werden sollen, die mit <base> inkludiert werden, ist die
inkludierte XML-Datei mit den Job-Ketten Definitionen zu öffnen.
Wenn Sie auftragsgesteuerte Jobs in Job-Ketten verwenden, muss festgelegt werden, wie die Aufträge
entstehen:
Aufträge können durch Verzeichnisüberwachung erzeugt werden - definieren Sie hierfür Dateiaufträge im
Formualar Job Chains.
Sie können Aufträge direkt mit einem <add_order>-Kommando erstellen - definieren Sie solche Aufträge im
Formular Orders. Der Editor generiert aus diesem Eintrag ein <add_order>-Element, das Sie sich über das
Formular Commands anzeigen lassen können.
1.8.1.5 Job Wizard
Mit dem Job Wizard kann ein neuer Job auf Basis eines bereits dokumentierten Standards-Jobs erstellt werden.
Software- und Organisations-Service GmbH
August 2014
115
Vorhandene Job-Dokumentationen liegen als XML-Dateien im Unterverzeichnis /jobs des
Scheduler-Installationsverzeichnisses. Mit der Scheduler-Auslieferung steht bereits eine Reihe von dokumentierten
Standard-Jobs zur Verfügung.
Der Job Wizard liest das /jobs-Verzeichnis und bietet alle Jobs zum Import an. Ein importierter Job hat die gleichen
Eigenschaften wie das Vorbild, insbesondere die Sprache der Implementierung. Job-Parameter werden ebenfalls
übernommen, können aber editiert werden. Weitere Eigenschaften wie die Anzahl der Tasks, Startzeiten,
Timeout-Einstellungen etc. können Schritt für Schritt erfolgen. Dabei unterstützt der Wizard die Eingaben durch
erläuternden Text.
Um den Assistenten zu starten, wählen Sie Job Wizard im Formular Jobs:
Der Wizard erstellt einen neuen Job in folgenden Schritten:
1.8.1.6 Scheduler Job Dokumentation erstellen
Für jeden Scheduler-Job kann eine Dokumentation in einem festgelegten XML-Format erstellt werden.
Die Dokumentation wird in der Regel vom Entwickler eines Jobs erstellt und dient dem Anwender/ Deployer, die
Job-Konfiguration für konkrete Job-Implementierungen vorzunehmen.
Mit dem Editor können Sie die XML-Datei zur Job-Dokumentation formularbasiert erstellen, ohne das XML-Format
zu kennen. Mit Hilfe eines Stylesheets scheduler_job_documentation.xsl kann die Dokumentation für den
Anwender im Browser als HTML-Seite angezeigt werden.
Ein dokumentierter Job wird im /jobs-Verzeichnis des Schedulers gespeichert und ist damit als Vorbild für neue
Jobs mit Hilfe des Job Wizards verfügbar.
Wählen Sie den Menüpunkt File/New/Documentation:
Software- und Organisations-Service GmbH
August 2014
116
Zu jedem Formular ist eine kontextbezogene Hilfe mit F1 erreichbar:
1.8.1.7 Hot Folder editieren
Der JobScheduler Editor kann einen ganzen hot folder öffnen und bearbeiten. Dazu wird im File Menü mit dem
Befehl Open Hot Folder der live folder oder einer seiner Unterordner geöffnet.
Links in der Baumansicht werden nun alle Objekte angezeigt, die in diesem Hot Folder definiert sind:
Software- und Organisations-Service GmbH
August 2014
117
Um ein neues Objekt (z.B. einen Job) anzulegen, wählen Sie im linken Baum den Elternknoten aus(1), drücken Sie
den "new" Knopf(2), wählen das neu enstandene Objekt(3) und geben diesem einen Namen(4):
Software- und Organisations-Service GmbH
August 2014
118
Software- und Organisations-Service GmbH
August 2014
119
Wenn Sie nun Save aus dem File Menü wählen, speichert der JobScheduler Editor alle in diesem Verzeichnis
geänderten oder hinzugefügten Objekte. Dateinamen müssen dabei nicht angegeben werden. Diese erzeugt der
JobScheduler Editor aus den Objektnamen selbstständig.
1.8.1.8 Remote Connection
1.8.1.8.1 FTP/SFTP
Der JobScheduler kann eine XML-Konfigurationsdateien per FTP (File Transfer Protocol) bzw. SFTP (Secure FTP)
öffnen bzw.eine offene Datei per FTP/SFTP speichern. Sie können über den Menüpunkt File -> FTP oder über den
Toolbar den FTP Dialog öffnen:
Software- und Organisations-Service GmbH
August 2014
120
Es erscheint ein Dialog, indem Sie die zu öffnenden Profile (FTP-Verbindung) und anschließend die zu öffnenden
Dateien auswählen können.
Software- und Organisations-Service GmbH
August 2014
121
1.8.1.8.1.1 Die Bedienelemente
1.8.1.8.1.1.1 FTP Zugang auswählen
In diesem Auswahllisten können Sie einen bereits konfigurierten FTP Zugang auswählen
1.8.1.8.1.2 Verzeichniswechsel
Hier steht als erstes das konfigurierte Verzeichnis auf dem FTP Server. Sobald Sie sich mit dem FTP Server
verbinden, wird zum Verzeichnis auf dem FTP Server gesprungen. Wenn Sie in der Dateiliste navigieren, dann
steht in diesem Textfeld das aktuelle Verzeichnis am FTP Server, in dem Sie sich befinden. Sie haben die
Möglichkeit jederzeit ein neues Verzeichnis anzugeben, indem Sie im Textfeld einen neuen Verzeichnisnamen
angeben und auf den Button "Change Directory" klicken.
1.8.1.8.1.3 Refresh
Aktualistert alle Verzeichnis- und Dateiinformationen vom FTP Server
Software- und Organisations-Service GmbH
August 2014
122
1.8.1.8.1.4 New Folder
Legt ein neues Verzeichnis auf dem FTP Server an.
1.8.1.8.1.5 Remove
Eine ausgewählte Datei bzw. ein Verzeichnis in der Dateiliste wird auf dem FTP Server gelöscht.
1.8.1.8.1.6 Open
Wurde der FTP Dialog unter der Menüpunkt "Open by FTP" ausgewählt, dann wird beim Betätigen des Buttons
"Open" die XML-Datei vom FTP Server heruntergeladen und im Editor geöffnet.
Wurde der FTP Dialog unter der Menüpunkt "Open Hot Folder by FTP" ausgewählt, dann sind nur Verzeichnisse
zu sehen. Dateien werden nicht in der Dateiliste angezeigt. Beim Auswählen eines Verzeichnisses werden vom
FTP Server alle Dateien dieses Hot Folders heruntergeladen und im Editor geöffnet.
1.8.1.8.1.7 Close
Schliesst den FTP Dialog
1.8.1.8.1.8 Log
Zeigt den Protokolldialog. Hier können Sie alle Befehle, die an den FTP Server geschickt wurden, und die
Antworten vom FTP Server sehen.
1.8.1.8.1.9 Profiles
Hier sehen Sie alle konfigurierten FTP Zugänge. Sie haben die Möglichkeit neue FTP Zugänge anzulegen bzw.
vorhandene FTP Zugänge zu editieren oder zu löschen.
Software- und Organisations-Service GmbH
August 2014
123
Software- und Organisations-Service GmbH
August 2014
124
Software- und Organisations-Service GmbH
August 2014
125
Alle FTP Zugänge werden in einer Konfigurationsdatei gespeichert. Die Konfigurationsdatei liegt unter
scheduler_install_directory/config/factory.ini und hat folgende Sektion und Einträge:
[profile profilename]
host=
port=
user=
root=
localdirectory=
transfermode=
save_password=
protocol=SFTP
use_proxy=
proxy_server=
proxy_port=
Software- und Organisations-Service GmbH
August 2014
126
auth_method=
auth_file=
1.8.1.8.2 WebDAV
Der JobScheduler kann eine XML-Konfigurationsdateien per WebDAV öffnen bzw. eine offene Datei per WebDAV
speichern. Sie können über den Menüpunkt File -> WebDAV den WebDAV Dialog öffnen:
Der Menüpunkt WebDAV ist nur aktiv, wenn die notwendigen Bibliotheken für die WebDAV-Verbindungen
vorhanden sind. Diese Bibliotheken sind aus Lizenzgründen nicht Teil der JobScheduler Distribution. Sie können
z.B. vom Sourceforge Projekt webdavclient4j unter https://sourceforge.net/projects/webdavclient4j/
heruntergeladen werden.
Es müssen folgende Bibliotheken im Verzeichnis scheduler_installation_directory/lib vorhanden sein,
dabei können ggf. anderen Bibliotheksnamen oder Versionsnummern zum Einsatz kommen.
•
•
•
•
Der
commons-logging.jar
webdavclient4j-core-0.92.jar
commons-codec-1.3.jar
commons-httpclient-3.0.1.jar
JobScheduler
Editor
wird
über
eine
Kommandodatei
aufgerufen,
die
sich
unter
scheduler_installation_directory/bin befindet. Hier muss der CLASSPATH um die oben genannten
Bibliotheken erweitert werden.
Es erscheint ein Dialog, indem Sie das zu öffnenden Profil (WebDAV-Verbindung) und anschließend die zu
öffnenden Dateien auswählen können.
Software- und Organisations-Service GmbH
August 2014
127
1.8.1.8.2.1 Die Bedienelemente
1.8.1.8.2.1.1 WebDAV Zugang auswählen
In diesen Auswahllisten können Sie einen bereits konfigurierten WebDAV Zugang auswählen
1.8.1.8.2.2 URL Wechsel
Hier steht als erstes die konfigurierte URL auf dem WebDAV Server. Sobald Sie mit dem WebDAV Server
verbunden sind, werden alle Dateien und Verzeichnisse dieser URL angezeigt. Wenn Sie im Dateiliste navigieren
steht dann in diesem Textfeld der aktuelle URL auf der WebDAV Server. Sie haben aber auch die Möglichkeit
jederzeit eine neue URL anzugeben, in dem Sie im Textfeld eine neue URL angeben und auf den Button "Change
Directory" klicken.
1.8.1.8.2.3 Refresh
Aktualistert alle Verzeichnis- und Dateinformationen vom WebDAV Server
Software- und Organisations-Service GmbH
August 2014
128
1.8.1.8.2.4 New Folder
Legt einen neuen Verzeichnis auf dem WebDAV Server an.
1.8.1.8.2.5 Remove
Eine ausgewählte Datei bzw. ein Verzeichnis in der Dateiliste wird auf dem WebDAV Server gelöscht.
1.8.1.8.2.6 Open
Wurde der WebDAV Dialog unter dem Menüpunkt "Open by WebDAV" ausgewählt, dann wird beim Betätigen des
Button "Open" die XML-Datei vom WebDAV Server heruntergeladen und im Editor geöffnet.
Wurde der WebDAV Dialog unter dem Menüpunkt "Open Hot Folder by WebDAV" ausgewählt, dann sind nur
Verzeichnisse zu sehen. Dateien werden nicht in der Dateiliste angezeigt. Beim Auswählen eines Verzeichnisses
werden vom WebDAV Server alle Dateien des Hot Folders heruntergeladen und im Editor geöffnet.
1.8.1.8.2.7 Close
Schließt den WebDAV Dialog
1.8.1.8.2.8 Log
Zeigt den Protokolldialog. Hier können Sie alle Befehle, die an den WebDAV Server geschickt wurden, und die
Antworten vom WebDAV Server sehen.
1.8.1.8.2.9 Profiles
Hier sehen Sie alle konfigurierte WebDAV Zugänge. Sie haben die Möglichkeit neue WebDAV Zugänge anzulegen
bzw. vorhandene WebDAV Zugänge zu editieren oder zu löschen.
Software- und Organisations-Service GmbH
August 2014
129
Alle WebDAV Zugänge werden in einer Konfigurationsdatei gespeichert. Die Konfigurationsdatei liegt unter
scheduler_installation_directory/config/factory.ini und hat folgende Sektion und Einträge:
[webdav_profile profilename]
url =
user =
Software- und Organisations-Service GmbH
August 2014
130
password =
localdirectory=
save_password=
use_proxy=
proxy_server=
proxy_port=
debug=
1.9 Datenbank
Der JobScheduler kann mit und ohne Datenbank betrieben werden. Der Betrieb mit Datenbank hat folgende
Vorteile:
Task-Warteschlange
Der JobScheduler speichert die in den Warteschlangen eingereihten Tasks in einer Tabelle unter seiner
Scheduler-ID (Option -id ). Sobald der JobScheduler erneut startet, liest er die Warteschlange aus der
Datenbank.
Aufträge
Der JobScheduler speichert jeden Auftrag in einer Tabelle unter seiner Scheduler-ID (Option -id ). Sobald
der JobScheduler erneut startet, liest er die Aufträge aus der Datenbank.
Task-Historie
Für jede Task schreibt der JobScheduler einen Satz, außerdem bei Start und Ende des JobSchedulers.
Auftragshistorie
Der JobScheduler hält den Lauf der Aufträge durch die Job-Ketten in der Auftragshistorie fest.
Hier lesen Sie weiteres zur Historie (Seite 132).
Wie die Tabellen angelegt werden, steht hier: »Vom JobScheduler verwendete SQL-Anweisungen« (Seite 348).
1.9.1 Einstellungen
Datenbank und Fehlerbehandlung
factory.ini (Abschnitt [spooler], Eintrag db= …)
factory.ini (Abschnitt [spooler], Eintrag need_db= …)
factory.ini (Abschnitt [spooler], Eintrag max_db_errors= …)
Die Namen der Tabellen
factory.ini (Abschnitt [spooler], Eintrag db_variables_table= …)
factory.ini (Abschnitt [spooler], Eintrag db_tasks_table= …)
Software- und Organisations-Service GmbH
August 2014
131
factory.ini (Abschnitt [spooler], Eintrag db_orders_table= …)
factory.ini (Abschnitt [spooler], Eintrag db_history_table= …)
factory.ini (Abschnitt [spooler], Eintrag db_order_history_table= …)
Ob eine Historie geschrieben werden soll
factory.ini (Abschnitt [spooler], Eintrag history= …)
factory.ini (Abschnitt [spooler], Eintrag order_history= …)
factory.ini (Abschnitt [job], Eintrag history= …)
Ob die Protokolle in der Historie aufgenommen werden sollen
factory.ini (Abschnitt [spooler], Eintrag history_with_log= …)
factory.ini (Abschnitt [spooler], Eintrag order_history_with_log= …)
factory.ini (Abschnitt [job], Eintrag history_with_log= …)
Der Task-Historie können Sie eigene Spalten hinzufügen
factory.ini (Abschnitt [spooler], Eintrag history_columns= …)
factory.ini (Abschnitt [job], Eintrag history_columns= …)
Task.set_history_field()
Die Bedingungen für einen Eintrag in die Task-Historie
factory.ini (Abschnitt [spooler], Eintrag history_on_process= …)
1.9.2 Programmschnittstelle
Das Objekt spooler stellt die Tabellennamen bereit
Spooler.db_variables_table_name()
Spooler.db_tasks_table_name()
Spooler.db_orders_table_name()
Spooler.db_history_table_name()
Spooler.db_order_history_table_name()
Eigene Felder der Historie beschreiben ( factory.ini (Abschnitt [job], Eintrag history_columns= …))
Task.set_history_field()
1.9.3 Kommandos
Historie zeigen
Kommando <show_history>
Software- und Organisations-Service GmbH
August 2014
132
Kommando <show_task>
Kommando <show_order>
1.9.4 Fehlertoleranz
Der JobScheduler toleriert Datenbankfehler. Dadurch kann er mit einer vorübergehend heruntergefahrenen
Datenbank umgehen. Näheres hierzu finden sie hier: factory.ini (Abschnitt [spooler], Eintrag need_db= …).
Wenn eingestellt ist, dass der JobScheduler nach Verbindungsverlust auf eine erneute Verbindung zur Datenbank
warten soll, hält der JobScheduler solange an. Nur Kommandos über TCP oder HTTP verarbeitet er. Er kann nicht
beendet, nur abgebrochen werden (s. Beendigung (Seite 225)).
1.10 Historie
1.10.1 1. Gegenstand der Historie
Jeder Job-Lauf wird verzeichnet. Festgehalten werden
•
•
•
•
•
•
•
•
•
•
•
•
Satzkennung: ID der für einen Job gestarteten Task, eindeutig für die Task
Scheduler-ID
Jobname
Startzeit
Endzeit (falls erreicht)
Anlass des Starts (falls es mehrere Start-Anlässe gibt, wird der möglicherweise wichtigste Anlass genommen)
Parameter (in XML)
Anzahl Job-Schritte (Anzahl der spooler_process-Aufrufe)
Fehler-Flag
Fehler-Code und Fehlertext
Job-Protokoll (nur, wenn das Protokoll in eine Datenbank geschrieben wird)
Extra Felder
An der TCP-Schnittstelle sind Auszüge der Historie lesbar.
Spalten der Historie
id
Eindeutige Kennung der Task (Tabellenschlüssel)
spooler_id
Scheduler-ID
job_name
Job-Name
start_time
Startzeit (yyyy-mm-dd HH:MM:SS)
end_time
Endezeit (yyyy-mm-dd HH:MM:SS)
steps
Anzahl Aufgerufener spooler_process()
cause
Anlass des Starts
error
0: Kein Fehler; 1: Fehler
error_code
Fehlercode
Software- und Organisations-Service GmbH
August 2014
133
error_text
Fehlertext
parameters
Parameter des Jobs (wenn vorhanden) als XML-Dokument (Clob)
log
Job-Protokoll (nicht in der tabulierten Datei bei Verwendung ohne Datenbank)
1.10.2 2. Historiendatei
Die Historie kann in einfache Dateien oder in eine Datenbank geschrieben werden.
1.10.2.1 2.1 Einfache Dateien (tabulierte Dateien)
Für jeden Job wird im Verzeichnis der Protokolldateien (Option -log-dir=) eine Datei fortgeschrieben. Die
Datenfelder werden durch Tabulator getrennt. Beim Start eines Jobs wird ein Satz geschrieben, der beim Ende mit
den vollständigen Daten überschrieben wird.
Dateiname ist log_dir /history. scheduler_id .job. jobname .txt
Die Datei wird beim JobScheduler Start neu angelegt. Eine bereits vorhandene Datei kann zurvor umbenannt und
komprimiert werden.
Der JobScheduler schreibt in die erste Zeile die Spaltennamen.
Tabulatoren in den Daten (v.a. Fehlermeldung) werden unterdrückt.
Jedes Feld hat für 1024 Zeichen Platz. Längere Einträge werden abschnitten.
Archivierung
Beim Start des JobSchedulers werden die Historien der Jobs überschrieben. Die vorhandenen Historien können
mit dem Eintrag history_archive in der Konfigurationsdatei factory.ini (Seite 84) archiviert werden:
[spooler]
history_archive = yes|no|gzip
[Job jobname]
history_archive = yes|no|gzip
history_archive=yes benennt die Datei um. Dazu wird der Dateiname um einen Zeitstempel (sekundengenau)
ergänzt.
history_archive=gzip komprimiert die Datei mit zlib (gzip) von Jean-loup Gailly (http://www.gzip.org/zlib/).
Der Dateiname wird neben dem Zeitstempel um die Endung .gz ergänzt. Die Datei kann mit gzip dekomprimiert
werden. Sie lässt sich auch mit der Hostware mit "nl | gzip | history.gz" lesen.
1.10.2.2 2.2 Datenbank
Alle Daten werden in eine Tabelle geschrieben. Das Task-Protokoll wird in ein Blob geschrieben. Die Tabellennamen können in der Konfigurationsdatei factory.ini (Seite 84) eingestellt werden:
[spooler]
db_history_table
= tabellenname | SCHEDULER_HISTORY
db_variables_table = tabellenname | SCHEDULER_VARIABLES
Software- und Organisations-Service GmbH
August 2014
134
In der Tabelle SCHEDULER_VARIABLES wird in einem Eintrag die nächste freie Job-Nummer gehalten.
need_db
Mit dem Eintrag need_db=no kann eingestellt werden, dass der JobScheduler auch starten soll, wenn die
Datenbank sich nicht öffnen lässt. Voreingestellt ist need_db=yes. [spooler]
db = odbc -db=scheduler
need_db = no
Wenn mit db= nur ein Datenbankdateiname und log_dir=*stderr eingestellt sind, kann die Datenbank mangels
Verzeichnis nicht geöffnet werden. Bei need_db=yes startet dann der JobScheduler nicht.
Microsoft-Access-Datenbank wird automatisch angelegt
Wenn bei db= nur ein einfacher Dateiname angegeben ist, stellt der JobScheduler ihm "odbc -create"
voran. Damit wird eine Microsoft MS-Access automatisch angelegt (s. Dateityp ODBC).
In der Datenbank werden die Tabellen SCHEDULER_HISTORY und SCHEDULER_VARIABLES verwendet. Sie werden bei
Bedarf eingerichtet, wobei die SQL-Syntax von MS-Access verwendet wird.
Satz für JobScheduler Start
Der JobScheduler schreibt beim Start einen Satz mit einer eigenen ID in die Historie. Beim Beenden trägt er in
diesem Satz die Zeit ein, so dass ein Satz mit Start- und Endezeitpunkt des JobSchedulers vorliegt. Job-Name ist "
(Spooler)". 1.10.2.3 2.3 Konfiguration in der Datei factory.ini
In der Konfigurationsdatei factory.ini (Seite 84) lassen sich einstellen:
[spooler]
db
db_history_table
db_variables_table
history
history_columns
history_on_process
history_with_log
history_archive
=
=
=
=
=
=
=
=
datenbank
SCHEDULER_HISTORY
SCHEDULER_VARIABLES
no|yes
feld1, feld2,
yes|1|2
no|yes|gzip
no|yes|gzip
[Job jobname]
history
history_columns
history_on_process
history_with_log
history_archive
=
=
=
=
=
no|yes
feld1, feld2,
yes|1|2
no|yes|gzip
no|yes|gzip
Die Einstellungen unter [Job jobname ] haben Vorrang vor [spooler].
history=no unterdrückt die Historie. Wenn eine Datenbank angegeben ist, wird dennoch der Satz für den
JobScheduler Start geschrieben.
history_on_process gibt die Anzahl der Aufrufe von spooler_process() an, ab der ein Eintrag in die Historie
geschrieben werden soll. Bei 1 wird ein Satz nicht geschrieben, wenn spooler_open false liefert.
Software- und Organisations-Service GmbH
August 2014
135
history_with_log lässt das Task-Protokoll in die Datenbank mit aufnehmen. Wahlweise komprimiert.
1.10.2.4 2.4 Startanlässe (cause)
In der Historie enthält die Spalte cause den Anlass des Job-Laufs:
none Task ist nicht gestartet (das kommt in der Historie nicht vor) period_once <run_time once="yes"> period_single <run_time single_start="..."> period_repeat <run_time repeat="..."> job_repeat spooler_job.repeat=... queue spooler_job.start() oder <start_job> queue_at wie queue, aber mit bestimmter Zeitangabe (Option at)
directory eine Verzeichnisüberwachung (start_when_directory_changed)lässt den Job
starten
signal <signal_object> delay_after_error spooler_job.delay_after_error 1.10.3 3. Task-Kennung und extra Felder
Jede Task, die für einen Job gestartet wurde, erhält eine Kennung. Wenn eine Datenbank verwendet wird, ermittelt
der JobScheduler sie aus der Tabelle SCHEDULER_VARIABLES. Die Kennung ist dann für alle JobScheduler
eindeutig, die diese Datenbanktabelle nutzen. Andernfalls wird eine fortlaufende Nummer vergeben. Die erste Task
hat die Nummer 1.
Die Kennung kann im Skripten, die das JobScheduler API verwenden, mit der Eigenschaft id abgefragt werden:
meine_id = spooler_task.id
Die Historie kann weitere beliebige Felder aufnehmen, die der Job füllen kann:
spooler_task.history_field( "feldname" ) = wert
Das Feld feldname muss als Spalte in der tabulierten Datei oder in der Historientabelle bekannt sein. Groß-/
Kleinschreibung spielt keine Rolle.
Wenn die Historie in einer Datenbank geführt wird, kann es eine Rolle spielen, von welchem Typ wert ist,
insbesondere ob Zahl oder Zeichenkette.
1.10.3.1 3.1 Extra Felder in der tabulierten Datei
Die zusätzlichen Spalten werden in der Konfigurationsdatei factory.ini (Seite 84) bekannt gemacht [spooler]
history_columns = spalteniste
Software- und Organisations-Service GmbH
August 2014
136
[Job jobname]
history_columns = spaltenliste
Die spaltenliste ist eine durch Komma getrennte Liste von Spaltennamen, die der tabulierten Datei hinzugefügt
werden sollen.
1.10.3.2 3.2 Extra Felder in der Datenbank
Die zusätzlichen Spalten in der Historientabelle werden automatisch erkannt. Wenn der JobScheduler die Tabelle SCHEDULER_HISTORY anlegt, richtet er auch die extra Spalten ein, die in
history_columns aufgeführt sind. Als Typ wird char(250) verwendet.
1.10.4 4. Lesen der Historie über die TCP-Schnittstelle
<show_history job="jobname" prev="anzahl|all "what="all"/>
liefert rückwärts geordnet die letzten anzahl Einträge der Historie des angegeben Jobs jobname. Voreinstellung für
anzahl ist 10. Alle Einträge werden mit tail="all" gelesen. Die Funktion benötigt viel Speicherplatz, denn die
Historie wird als XML-Dokument mit DOM im Speicher aufgebaut. Max. 1000 Einträge werden geliefert.
what="all" liefert auch die Job-Protokolle.
Mit folgenden Varianten lassen sich Ausschnitte der Historie lesen. Das Attribut what kann immer angegeben
werden.
Um anzahl Einträge vor der id zu erhalten:
<show_history job="jobname" id="id" prev="anzahl"/>
Um anzahl Einträge nach der id zu erhalten:
<show_history job="jobname" id="id" next="anzahl"/>
Um nur den Eintrag der id zu bekommen. Gut, wenn mit what="all" das Jobprotokoll einer bestimmten Task
gelesen werden soll.
<show_history job="jobname" id="id"/>
Das Ergebnis sind dann so aus:
<history>
<history.entry id="kennung" job="jobname" start_time="startzeit" end_time="
endezeit" ...>
<variableset>
<variable name="name1" value="wert1"/>
<variable name="name2" value="wert2"/>
</variableset>
<log>Jobprotokoll</log>
</history.entry>
<history.entry ...>
Software- und Organisations-Service GmbH
August 2014
137
...
</history.entry>
...
</history>
1.10.5 5. Fehlerbehandlung
Fehler beim Öffnen oder Schreiben der Historie werden ins JobScheduler Protokoll geschrieben und ignoriert.
1.11 Der JobScheduler als Dienst
Der JobScheduler wird unter Windows als Dienst betrieben. Die Einrichtung erfolgt automatisch mit dem
Installationsprogramm. Nachstehend sind die Kommandozeilenoptionen beschrieben, die für die Einrichtung
relevant sind. Diese Optionen werden vom Installationsprogramm ins Start-Script .\bin\jobscheduler.cmd
(Windows) bzw. ./bin/jobscheduler.sh (Unix) übernommen.
Aufruf
scheduler -remove-service [-service-name= name] [-id= id]
scheduler [-remove-service] -install-service
[-service-name= name] [-service-display= gezeigtername] [-service-descr= beschreibung]
[-need-service= name]
[optionen]
Parameter
-remove-service
Entfernt den Dienst. Der Dienst muss vorhanden sein.
-install-service
Installiert den Dienst. Weitere Kommandozeilenoptionen, die hier nicht aufgeführt sind, werden beim Start des
Dienstes dem JobScheduler übergeben (v.a. -id=, -log-dir=)
-service-name= name
Stellt den (internen) Dienstnamen ein für -remove-service oder -install-service.
Voreinstellung ist sos_scheduler. Wenn die Option -id= angegeben ist: sos_scheduler_ id
-service-display= gezeigtername
Gibt den angezeigten Namen des Dienstes an.
Voreinstellung bei nicht angegebenen -service-name ist "SOS JobScheduler". Wenn die Option -id= angegeben
ist: "SOS JobScheduler -id=id". Wenn -service-name= angegeben ist, ist dies als angezeigter Name voreinstellt.
-service-descr= beschreibung
Setzt die Beschreibung des Dienstes. Voreinstellung ist "Job Automation Processor". Software- und Organisations-Service GmbH
August 2014
138
In Windows NT 4 ignoriert der JobScheduler diese Option.
-need-service= dienst
Gibt einen anderen Dienst an, von dem dieser Dienst abhängig ist. Windows startet diesen Dienst erst, wenn der
andere Dienst läuft. Die Option kann mehrfach angegeben werden. Ein unbekannter Dienstname wird von
Windows nicht bemängelt. Diese Option kann bspw. eingesetzt werden, wenn JobScheduler und Datenbank auf demselben Server ablaufen
und sichergestellt werden soll, dass die Datenbank zuerst gestartet ist bevor der JobScheduler startet.
Der Name eines Dienstes wird in der Dialogbox zum Dienst in der Dienststeuerung angezeigt.
Fehler beim Start
Die Dienststeuerung in Windows erlaubt es dem Dienst nicht, eine Fehlermeldung zurückzugeben, wenn der
Dienst nicht starten kann. Deshalb schreibt der Dienst einen einfachen Eintrag in die Ereignissteuerung.
Außerdem wird eine E-Mail mit der Fehlermeldung verschickt. Dazu werden die Einträge aus der Datei
factory.ini log_mail_from, log_mail_to, log_mail_cc, log_mail_bcc und smtp verwendet. Eine mit -ini=
eingestellte Konfigurationsdatei wird nicht verwendet. Die Einstellungen in der Datei sos.ini, Abschnitt [mail]
werden alternativ verwendet (s.a. sos.ini, Abschnitt [spooler] (Seite 169)).
1.12 Backup JobScheduler
1.12.1 JobScheduler Backup Cluster
Ein JobScheduler Backup-Cluster sorgt für Ausfallsicherheit für einen JobScheduler indem ein oder mehrere
Ersatz-Scheduler (Backup Scheduler) auf anderen Rechnern gestartet werden. Eine ausfallsicheres System
besteht demnach aus einem primären JobScheduler und mindestens einem Backup Scheduler.
In einem Backup-Cluster zeigen alle JobScheduler ihre Verfügbarkeit durch das Versenden von Herzschlägen an.
Alle JobScheduler prüfen, ob die jeweils anderen JobScheduler verfügbar sind. Stellt ein Backup JobScheduler
fest, dass vom primären JobScheduler die Herzschläge über einen längeren Zeitraum (ca. 1-2 Minuten)
ausbleiben, übernimmt dieser die Verarbeitung. Dabei werden die offenen Aufträge und laufenden Jobs fortgeführt
und entsprechend der Konfiguration neue Jobs gestartet
In einem Backup Cluster ist maximal ein JobScheduler aktiv, d.h. der primäre JobScheduler startet Jobs bzw.
verarbeitet Aufträge. Die anderen JobScheduler sind inaktiv, d.h. die Backup JobScheduler warten darauf, bei
Ausfall des primären JobSchedulers die Verarbeitung zu übernehmen.
Die Voraussetzungen für die Operation eines Backup Clusters sind schematisch in der folgende Zeichnung
abgebildet, und werden im Detail in den nächsten Abschnitt beschreiben.
Software- und Organisations-Service GmbH
August 2014
139
Die Übernahme der Verarbeitung durch eines Backup JobSchedulers ist schematisch in der folgende Zeichnung
abgebildet:
Software- und Organisations-Service GmbH
August 2014
140
1.12.1.1 Voraussetzungen für den JobScheduler Backup Cluster
•
•
•
•
Alle JobScheduler des Clusters verwenden die selbe Datenbank. Es werden die Datenbanksysteme Oracle,
DB2, MySQL und Postgres unterstützt.
Alle JobScheduler verwenden die selbe Konfigurationsdatei bzw. eine genaue Kopie.
Der primäre JobScheduler und die Backup JobScheduler werden mit der gleichen Scheduler-ID gestartet.
Der primäre JobScheduler und die Backup JobScheduler werden mit der Option -exclusive gestartet.
1.12.1.2 Starten des JobScheduler Backup Clusters
Die JobScheduler, die den Cluster bilden, werden in beliebiger Reihenfolge gestartet. Der erste JobScheduler, der
nicht mit der Option -backup gestartet wurde, wird aktiv.
Software- und Organisations-Service GmbH
August 2014
141
1.12.1.3 Kommandozeilenparameter
Folgende Kommandozeilenparameter konfigurieren einen JobScheduler als Mitglied des Backup Clusters:
•
•
•
-exclusive bestimmt, dass der JobScheduler Mitglied des Backup Cluster ist.
-backup bestimmt, dass es sich um einen Backup JobScheduler handelt. Fehlt das Attribut, dann handelt es
sich um einen primären JobScheduler. Es kann mehrere Backup JobScheduler geben, die alle die gleiche
Startpriorität im Falle eines Ausfalls des aktiven JobSchedulers haben
-backup-precedence bestimmt die Rangfolge, mit der Backup JobScheduler aktiv werden. Es wird jeweils
der JobScheduler mit dem kleinstem Wert aktiv, wenn der primäre JobScheduler ausfällt.
1.12.1.4 Beenden von JobSchedulern im Backup Cluster mit den Funktionen der Web-Oberfläche
Beim Beenden werden die laufenden Prozessschritte von Jobs noch ausgeführt, allerdings keine neuen
Prozessschritte veranlasst. Mit dem Parameter -timeout =<wert> kann das Beenden laufender Prozessschritte
nach Ablauf einer Zeit erzwungen werden.
1.12.1.4.1 Beenden aller JobScheduler im Backup Cluster
Alle JobScheduler im Cluster werden beendet, indem in der JobScheduler Web-Oberfläche das Kommando
"terminate cluster" aufgerufen wird.
Entspricht dem XML-Kommando <terminate all_schedulers="yes">
1.12.1.4.2 Beenden aller JobScheduler im Backup Cluster mit Timeout
Alle JobScheduler im Cluster werden beendet, indem in der JobScheduler Web-Oberfläche das Kommando
"terminate cluster within 60s" aufgerufen wird. Nach Ablauf von 60 Sekunden werden alle noch laufenden
Prozessschritte abgebrochen.
Entspricht dem XML-Kommando <terminate all_schedulers="yes" timeout="60">
1.12.1.4.3 Beenden aller JobScheduler im Backup Cluster mit Neustart
Alle JobScheduler im Cluster werden beendet, indem in der JobScheduler Web-Oberfläche das Kommando
"terminate and restart cluster" aufgerufen wird. Anschließend starten sie neu. Der primäre JobScheduler ist nach
dem Neustart wieder aktiv.
Werden alle JobScheduler neu gestartet, so ist anschließend der primäre JobScheduler der aktive JobScheduler.
Entspricht dem XML-Kommando <terminate all_schedulers="yes" restart="yes">
1.12.1.4.4 Beenden aller JobScheduler im Backup Cluster mit Timeout und Neustart
Alle JobScheduler im Cluster werden beendet, indem in der JobScheduler Web-Oberfläche das Kommando
"terminate and restart cluster" aufgerufen wird. Die JobScheduler starten anschließend neu. Der primäre
JobScheduler ist nach dem Neustart wieder aktiv. Nach Ablauf von 60 Sekunden werden alle noch laufenden
Prozessschritte abgebrochen.
Werden alle JobScheduler neu gestartet, so ist anschließend der primäre JobScheduler der aktive JobScheduler
Entspricht dem XML-Kommando <terminate all_schedulers="yes" restart="yes" timeout="60">
Software- und Organisations-Service GmbH
August 2014
142
1.12.1.4.5 Beenden des aktiven JobSchedulers. Die Backup JobScheduler bleiben gestartet ohne Jobs
und Aufträge zu verarbeiten
Ein aktiver JobScheduler wird beendet, indem in der JobScheduler Web-Oberfläche das Kommando "terminate"
aufgerufen wird. Das Kommando hat keinen Einfluss auf Backup JobScheduler, es erfolgt kein Failover, da kein
Fehlerzustand im primären JobScheduler eingetreten ist.
Entspricht dem XML-Kommando <terminate>
1.12.1.4.6 Beenden des aktiven JobSchedulers mit Neustart. Die Backup JobScheduler bleiben gestartet
ohne Jobs und Aufträge zu verarbeiten
Ein aktiver JobScheduler wird beendet und anschließend neu gestartet, indem in der JobScheduler
Web-Oberfläche das Kommando "terminate and restart" aufgerufen wird. Das Kommando hat keinen Einfluss auf
Backup JobScheduler, es erfolgt kein Failover, da kein Fehlerzustand im primären JobScheduler eingetreten ist.
Entspricht dem XML-Kommando <terminate restart="yes">
1.12.1.4.7 Beenden eines Backup JobSchedulers mit Neustart.
Ein JobScheduler wird beendet und anschließend neu gestartet, indem in der JobScheduler Web-Oberfläche das
Kommando "terminate and restart" aufgerufen wird.
Der Backup JobScheduler wird nach dem Neustart nicht aktiv. Ist im Cluster ein inaktiver primärer JobScheduler
gestartet, so wird dieser aktiv.
Entspricht dem XML-Kommando <terminate restart="yes">
1.12.1.5 Primären JobScheduler nach Ausfall reaktivieren
1.
2.
Der primäre JobScheduler wird nach einem Ausfall gestartet. Falls bereits ein Backup JobScheduler läuft,
übernimmt der primäre JobScheduler nicht die Verarbeitung.
Der Backup JobScheduler wird neu gestartet ("terminate and restart"). Der primäre, bislang inaktive,
JobScheduler wird aktiv und übernimmt die Verarbeitung. Wenn mehrere primäre JobScheduler vorhanden
sind, bestimmt -backup-precedence welcher JobScheduler aktiv wird.
1.12.1.6 Backup JobScheduler übernimmt die Verarbeitung
Der primäre JobScheduler wird mit "terminate fail-safe" beendet. Ein bereits laufender Backup JobScheduler
übernimmt automatisch nach ca. 1-2 Minuten die Verarbeitung.
1.12.1.7 Verhalten des Dienstes unter Windows
•
•
Das Beenden des Dienstes entspricht dem Kommando <terminate>. Die Backup JobScheduler laufen nicht
an. Wird ein Backup JobScheduler beendet und gibt es einen inaktiven primären JobScheduler, so wird der
primäre JobScheduler aktiv.
Das Starten des Dienstes entspricht dem Kommando <terminate restart="yes"> . Die Backup-Scheduler
laufen nicht an. Der primäre JobScheduler wird aktiv.
Software- und Organisations-Service GmbH
August 2014
143
1.12.1.8 Verhalten beim Neustart des Rechners
•
•
Wenn der Rechner heruntergefahren wird, übernimmt ein Backup JobScheduler auf einem zweiten Rechner
(continue_exclusive_operation="yes")
Wenn primärer JobScheduler und Backup JobScheduler neu gestartet werden, z.B. wg. Neustart der Server,
dann kann es sein, dass der Backup JobScheduler zuerst startet. Er übernimmt dann nicht sofort die
Verarbeitung sondern wartet, ob vom primären JobScheduler ein Herzschlag kommt. Nur wenn nach 60s kein
Herzschlag kommt, übernimmt der Backup JobScheduler die Verarbeitung. Dies entspricht dem
Standardverhalten beim Ausbleiben eines Herzschlags des aktiven JobSchedulers.
1.12.1.9 Einen inaktiven Backup JobScheduler zum aktiven primären JobScheduler machen
Wenn ein aktiver Backup JobScheduler beendet wird, dann wird er beim Neustart inaktiv sein. Falls der primäre
JobScheduler längere Zeit ausfällt, muss der Backup JobScheduler als primärer JobScheduler gestartet werden.
Ein Backup JobScheduler wird als primärer JobScheduler gestartet, indem beim Aufruf von jobscheduler.cmd der
Parameter "start -exclusive" anstelle von "start" angegeben wird.
1.12.1.10 Kommandos des Startscript
Wenn beim Start nur der Parameter "start" angegeben wird, damm wird der JobScheduler so gestartet wie es beim
Setup eingerichtet wurde.
Folgende zusätzliche Kommandos gibt es für den Betrieb eines JobScheduler im Backup Cluster
•
•
•
•
•
•
terminate_cluster Fährt alle JobScheduler des Backup Clusters herunter
restart_cluster Startet alle JobScheduler des Backup Clusters neu. Anschließend ist der primäre
JobScheduler aktiv.
terminate_fail-safe Beendet den JobScheduler. Ein anderer, inaktiver JobScheduler im Backup Cluster wird
aktiv.
start -exclusive Startet einen primären JobScheduler im Backup Cluster.
start -exclusive -backup Startet einen Backup JobScheduler im Cluster.
start -exclusive -backup -backup-precedence=[n] Startet einen Backup JobScheduler im Cluster mit der
Rangfolge [n].
1.12.1.11 Weiterführende Links
•
Watchdog-Monitor für Cluster Failover.
Software- und Organisations-Service GmbH
August 2014
Jobs
144
2 Jobs
2.1 Was ist ein Job?
Ein Job bestimmt das auszuführende Programm, seine Laufzeit und das Verhalten im Fehlerfall. Darüber hinaus
können die Parametrisierung, Vor- und Nachverarbeitung, konkurrierender Zugriff auf Sperren und mögliche
Folge-Jobs Teil einer Job-Konfiguration sein.
Ein Job wird definiert in der XML-Konfiguration mit <job> .
2.1.1 Konfiguration
Die XML-Konfiguration eines Jobs kann in der zentralen Startkonfigurationsdatei (meist ./config/scheduler.xml)
oder in Form einer separaten Datei in dem vom JobScheduler überwachten Konfigurationsverzeichnis (meist
./config/live) vorgenommen werden, siehe (Seite 78)
2.1.2 Implementierung
Der JobScheduler startet ausführbare Programme und kann Jobs mit individuellen Implementierungen starten, die
das API des JobSchedulers nutzen.
Ausführbare Programme
Sie können beliebig implementiert sein als executable, shell scripte, batch files. Dies bezieht Programme ein, z.B.
JavaScript, VBScript, Perl, PHP, Ruby etc., für die ggf. ein Interpreter mit der auszuführenden Programmdatei
gestartet werden muss. Java-Klassen können mit der für den JobScheduler konfigurierten JVM gestartet werden.
Ausführbare Programme können mit folgenden Elementen konfiguriert werden:
<script language="…">
<script language="shell">
Der JobScheduler erzeugt eine Shell für die Ausführung des Programms.
Beispiele:
<job name="simple_shell">
<script language="shell"><![CDATA[
echo hello world
call my_script.cmd
my_prog.exe
]]></script>
</job>
<job name="simple_command">
<script language="shell">
<include file="my_script.cmd"/>
</script>
</job>
Software- und Organisations-Service GmbH
August 2014
Jobs
145
Kommandos des Kommandozeileninterpreters können direkt als Inhalt des <script> Elements einngegeben
werden. Alternativ können Shell Scripte mittels <include> angegeben werden.
<script language="java">
Der JobScheduler startet eine JVM für die Ausführung der Java-Klasse.
Beispiel:
<job name="simple_java">
<script language
= "java"
java_class = "sos.scheduler.ftp.JobSchedulerFTPReceive"/>
</job>
<process file="…">
Der JobScheduler startet das Programm ohne separate Shell.
Beispiele:
<job name="simple_job">
<process file="c:\my_prog.exe"/>
</job>
<job name="interpreter_job">
<process file="c:\php\php.exe"
param="-f 'c:\test\phpinfo.php'"/>
</job>
Für Programmdateien, die per Interpreter gestartet werden, muss dieser als auszuführendes Programm konfiguriert
sein.
Implementierungen mit dem JobScheduler API
Job-Implementierungen können das API des JobSchedulers nutzen, z.B. zur Protokollierung, Benachrichtigung per
eMail, Zugriff auf Job-, Task- und Auftragsobjekte etc.
Der JobScheduler startet diese Scripte nicht per Interpreter (s.o.) sondern implementiert eine
Unterprogrammschnittstelle für den Aufruf von Scripten in diesen Sprachen und stellt ihnen Objekte und Methoden
zur Verfügung.
Java
Ein Job in Java ist eine Implementierung der abstrakten Oberklasse sos.spooler.Job_impl.
Die Java-Schnittstelle stellt weitere Klassen bereit. Sie gilt entsprechend für die COM- und Perl-Schnittstellen,
wenn Sie Ihren Job in einer anderen Sprache implementieren.
Den Pfad der implementierten Klasse geben Sie in sos.ini (Abschnitt [java], Eintrag class_path= …) an.
JavaScript und JScript (Seite 361)
JavaScript ist in der Implementierung von SpiderMonkey (http://developer.mozilla.org/en/docs/SpiderMonkey) im
Auslieferungsumfang des JobSchedulers für alle Plattformen enthalten.
Microsoft JScript ist auf Windows Plattformen verfügbar.
VBScript
Microsoft VBScript ist auf Windows Plattformen verfügbar.
Software- und Organisations-Service GmbH
August 2014
Jobs
146
Perl
Perl ist auf Unix-Plattformen i.d.R. vorinstalliert. Das Installationsprogramm des JobSchedulers versucht die
Unterprogrammschnittstelle passend zur vorhandenen Perl Version zu installieren.
Auf Windows-Plattformen kann eine Perl-Implementierung, z.B. von http://www.activestate.com, nachinstalliert
werden.
COM (Seite 148)
Sie können auch (unter Windows) einen Job in jeder beliebigen Programmiersprache als COM-Server
implementieren. Weiteres siehe hier (Seite 148).
2.1.3 Zustand eines Jobs
Ein Job ist in einem der folgenden Zustände.
pending
Keine Task läuft. Das ist der anfängliche Zustand.
running
Wenigstens eine Task läuft.
stopping
Der Job stoppt. Der JobScheduler startet keine weitere Task und die laufenden
Tasks werden beendet. Sobald alle Tasks des Jobs beendet sind, wechselt der Job
in den Zustand stopped.
Siehe das Kommando <modify_job cmd="stop"> .
stopped
Keine Task läuft und der JobScheduler startet keine weitere Task.
Siehe das Kommando <modify_job cmd="stop"> .
read_error
Das Kommando reread hat zu einem Fehler geführt, und der Job ist unbrauchbar,
weil der Programmcode nicht gelesen werden konnte.
Siehe das Kommando <modify_job cmd="reread"> .
error
Wenn eine Task mit Fehler geendet hat, startet der JobScheduler keine weitere
Task.
2.1.4 Zustand des Jobs ändern
Mit dem Kommando <modify_job> können Sie den Zustand des Jobs ändern. Die eingebaute HTML-Oberfläche
(Seite 174) des JobSchedulers bietet hierfür die entsprechenden Operationen an.
2.1.5 Eine Task starten
In der Konfiguration können Sie mit <run_time> einstellen, dass eine Task einmal oder periodisch gestartet werden
soll.
Das Kommando <start_job> startet eine Task, ebenso die API-Methode Job.start() .
Eine Task wird automatisch gestartet, wenn noch keine Task läuft und eine der folgenden Bedingungen gilt.
•
•
Zu Beginn einer <period> , wenn in ihr repeat= oder single_start= angegeben ist.
Wenn ein vorangehender Lauf Task.repeat gesetzt hat und die Zeit erreicht ist.
Software- und Organisations-Service GmbH
August 2014
Jobs
•
•
•
147
Wenn ein vorangehender Lauf fehlerhaft war und Job.delay_after_error abgelaufen ist.
Wenn das mit <period repeat="…"> angegebene Intervall nach dem Ende der zuletzt gelaufenen Task
abgelaufen ist.
Wenn die Verzeichnisüberwachung (Seite 162) aktiv ist und das überwachte Verzeichnis geändert worden ist.
Außerdem startet eine Task
•
wenn ein Auftrag für den Job vorliegt, und noch nicht soviele Tasks laufen, wie mit <job tasks="…">
zugelassen.
Eine Task läuft aber nur an, wenn sie eine Startzeit (at) hat oder
•
•
•
der Job nicht gestoppt ist,
es eine Periode für die aktuelle Zeit gibt,
und die Verzögerung nach Fehler ( Job.delay_after_error ) nicht wirkt.
2.1.6 Sperren
Jobs können mit Sperren versehen werden, um den gleichzeitigen Lauf zweier Tasks zu verhindern. Siehe (Seite
152).
2.1.7 Verzeichnisüberwachung
Der JobScheduler kann einen Job bei Änderungen in einem Dateiverzeichnis starten. Näheres im Kapitel
Verzeichnisüberwachung (Seite 162).
2.1.8 Monitor
Für einen Job kann ein Monitor Script konfiguriert werden. Der JobScheduler ruft Funktionen des Monitor Scripts
bei Start und Ende der Task auf sowie vor und nach der Methode spooler_process() .
Den Monitor bestimmen Sie mit <monitor> .
Beispiel:
<job name = "simple_ftp"
<params>
<param name = "ftp_host"
<param name = "ftp_user"
<param name = "ftp_password"
</params>
value = "localhost"/>
value = "anonymous"/>
value = "anonymous"/>
<script language
= "java"
java_class = "sos.scheduler.ftp.JobSchedulerFTPReceive"/>
<monitor>
<script language="javascript"><![CDATA[
function spooler_task_before() {
var today = yy = mm = dd = "";
today = new Date();
yy = today.getYear() + 1900;
mm = today.getMonth() + 1;
Software- und Organisations-Service GmbH
August 2014
Jobs
148
dd = today.getDate();
if (parseInt(mm) < 10) mm = "0" + mm;
if (parseInt(dd) < 10) dd = "0" + dd;
spooler_task.params.set_var("ftp_file_path", "^test_" + yy + "-" + mm + "-" +
dd + "\.csv$" );
return true;
}
]]></script>
</monitor>
</job>
Das Monitor Script verwendet einen Standard-Job der Auslieferung für den FTP-Transfer einer Datei. Dabei wird
der Job-Parameter für den Namen der zu übertragenden Datei dynamisch aus dem Tagesdatum
zusammengesetzt.
2.2 Spooler-Skripte als COM-Klassen implementieren
Bisher wird ein Skript im Spooler mit einer Scripting Engine realisiert. Das Skript in einer Skriptsprache (VBScript,
JScript, PerlScript) wird direkt im Element <script> angegeben.
Ein Spooler-Skript lässt sich auch als com-Klasse implementieren. Die com-Klasse kann in jeder Sprache, die com
unterstützt, implementiert werden, u.a. C++, Delphi und VisualBasic. Mit Hilfe von "Windows Script Component"
lässt sich die com-Klasse auch mit VBScript, JScript und PerlScript realisieren.
Die Klasse stellt die Methoden eines Jobs, Thread-Skripts oder Spooler-Skripts bereit, also:
spooler_init()
spooler_exit()
spooler_open()
spooler_close()
spooler_process()
spooler_on_success()
spooler_on_error()
Jede Methode ist optional. Ist sie nicht implementiert, wird wie bei den bisherigen Spooler-Skripten verfahren.
Die Klasse sollte außerdem eine Methode bereitstellen, mit der der Spooler-Kontext übergeben wird:
spooler_set_context(context)
Dieser Kontext ist ein com-Objekt (IDispatch) mit folgenden Eigenschaften:
log
spooler
thread
job
task
Diese Eigenschaften liefern die aus dem Spooler-Skripten bekannten Objekte spooler_log, spooler_task,
spooler_job, spooler_thread und spooler.
Software- und Organisations-Service GmbH
August 2014
Jobs
149
Gemeinsamkeiten von Skript in Scripting Engine und com-Klasse
•
•
•
•
Attribut use_engine="task" und use_engine ="job" möglich.
Als Job-Skript, Thread-Skript und Spooler-Skript (bzw. -Klasse) verwendbar
Aufrufe (spooler_init(), spooler_open() etc.) sind gleich
Die Aufrufe sind optional
Unterschiede zwischen Skript in Scripting Engine und com-Klasse
Skript mit Scripting Engine
COM-Klasse
Quellcode wird in der Konfiguration angegeben (oder
extern mit <include>).
Implementierung ist unabhänging vom Spooler. Jede
Sprache, die COM-Klassen mit später Bindung (
IDispatch) generiert, kann verwendet werden.
Der Kontext steht dem Skript mit den vordefinierten
Variablen spooler_log, spooler, spooler_thread,
spooler_job und spooler_task zur Verfügung. Der Spooler übergibt den Kontext dem com-Objekt mit
dessen Methode spooler_set_context().
Dasselbe Skript kann, wenn es in einer eigenen Datei
vorliegt, mit <include> an mehreren Stellen verwendet
werden.
Die Klasse kann an mehreren Stellen verwendet
werden. Es werden getrennte Objekte der Klasse
angelegt.
Attribut use_engine="task" und ="job" möglich
Attribut use_engine="task" und ="job" möglich
Deklaration in der Spooler-Konfiguration Der als com-Klasse registrierte Job kann über seinen Klassennamen angegeben werden:
<job name="delphijob">
<script com_class="meine_spooler_job_klasse"/>
</job>
Statt des Klassennamens kann auch die eindeutige clSID angegeben werden:
<job name="delphijob">
<script com_class="{F44FF458-D4DE-4cef-AA1A-CCC507346581}"/>
</job>
Attribut use_engine
Das Attribut use_engine kann auch für ein COM-Objekt verwendet werden. Bei use_engine="job" wird das
Objekt für mehrere Tasks beibehalten. Wie bisher wird spooler_init() nur einmal, spooler_open() aber für jede
Task (jeden Jobstart) aufgerufen. Die Bedeutung ist dieselbe wie bisher.
Direkte Angabe der DLL
Wenn die DLL eine weitere DLL braucht, die nicht geladen werden kann, hält Windows den Spooler mit einer
Messagebox an. Erst wenn der OK-Knopf gedrückt wird, setzt der Spooler fort. Die Angabe der DLL ist also nicht
für den unbeaufsichtigten Betrieb geeignet.
Wenn die com-Klasse nicht registiert werden soll, kann auch die DLL direkt angegeben werden. Die Klasse wird
dann als hexadezimale CLSID angegeben.
<job name="delphijob">
Software- und Organisations-Service GmbH
August 2014
Jobs
150
<script com_class="{xxxx-xx-...}" filename="meine_delphi.dll"/>
</job>
Beispiel
Die com-Klasse wird mit "Windows Script Component" realisiert. Die Quelle ist:
<?XML version="1.0"?>
<component>
<registration
progid = "Joacim.Component"
classid = "{F44FF458-D4DE-4cef-AA1A-CCC507346581}"
description = "Joacims Script Component"
version = "1"
/>
<public>
<method name="spooler_set_context"/>
<method name="spooler_init"/>
<method name="spooler_exit"/>
<method name="spooler_open"/>
<method name="spooler_process"/>
</public>
<script language="VBScript">
<![CDATA[
dim spooler_log
dim spooler_task
dim i
function spooler_set_context(c)
set spooler_log = c.log
set spooler_task = c.task
spooler_log "Script component spooler_set_context"
end function
function spooler_init
Software- und Organisations-Service GmbH
August 2014
Jobs
151
spooler_log "Script component spooler_init"
end function
function spooler_exit
spooler_log "Script component spooler_exit"
end function
function spooler_open
spooler_log "Script component spooler_open"
i = 3
end function
function spooler_process
spooler_log "Script component spooler_process i=" & i
i = i - 1
spooler_process = i > 0
end function
]]>
</script>
</component>
Diese Quelle wird in die Datei job.wsc geschrieben und mit folgendem Kommando als COM-Server registriert.
regsvr32 job.wsc In der Spooler-Konfiguration kann der Server mit seinem Klassennamen angegeben werden:
<job name="component">
<script com_class="Joacim.Component"/>
<run_time once="yes"/>
</job>
Oder mit seiner eindeutigen CLSID:
<job name="component">
<script com_class="{F44FF458-D4DE-4cef-AA1A-CCC507346581}"/>
<run_time once="yes"/>
</job>
Unix
Die Portierung auf Unix ist trotz com prinzipiell möglich. Statt der späten Bindung über die Schnittstelle IDispatch
wird die frühe Bindung verwendet. Das heißt:
Software- und Organisations-Service GmbH
August 2014
Jobs
•
•
•
•
•
•
152
Bindung zur Compile-Zeit über Header-Dateien statt Verwendung von IDispatch.
Die com-Klasse erbt von der Klasse Spooler.Job
Sie implementiert alle Aufrufe. Die Aufrufe sind nicht mehr optional (Fehlercode E_NOTIMPL kann
zurückgegeben werden)
Die com-Unterstützung von Delphi kann möglichweise nicht verwendet werden, wenn sie zuviel voraussetzt.
Stattdessen werden die com-Aufrufe direkt verwendet. Für die Job-Implementierung heißt das, dass die
Rückgabe einer Fehlermeldung mit dem Aufruf SetErrorInfo() codiert wird.
Das Modul (shared object) wird nicht registriert, sondern direkt mit <script filename="..."/> angegeben
Die für Unix geänderte Implementierung des Jobs wird auch in Windows ablauffähig sein. Ein #ifdef wird
wahrscheinlich nicht gebraucht. Der Job wird wegen der frühen Bindung sogar schneller laufen.
2.3 Sperren
Sperren im JobScheduler verhindern die Ausführung eines Jobs, solange eine bestimmte Sperre von einem oder
mehreren anderen Job(s) belegt ist. Sperren stehen für Jobs in Job-Ketten und für einzelne Jobs zur Verfügung.
Wartet ein Job auf die Freigabe einer Sperre, wird er automatisch gestartet, sobald die Sperre freigegeben wird.
Ein beispielhaftes Problem: Jobs benutzen eine Datenbank. Ein weiterer Job aber schaltet die Datenbank um. Er
darf das nur tun, wenn die ersten Jobs nicht laufen.
2.3.1 Konfiguration
Damit Jobs Sperren belegen können, müssen die Sperren zunächst bekanntgemacht werden.
<config>
<locks>
<lock name="lock_name"/>
<lock name="lock_name2"/>
…
</locks>
Beim einzelnen Job werden die anzuwendenden Sperren deklariert
<job>
<lock.use lock="lock_name"/>
<lock.use lock="lock_name2"/>
Sperren können exklusiv und nicht exklusiv verwendet werden. Bei nicht exklusiver Verwendung einer Sperre kann
die Zahl der nicht exklusiven Belegungen begrenzt werden. Die Voreinstellung für die Verwendung einer Sperre ist
die exklusive Belegung
Wenn eine Sperre verwendet wird, die nicht deklariert wurde, startet der JobScheduler den Job nicht.
Achtung: Bei Namen von Sperren wird Groß- und Kleinschreibung unterschieden!
Die Belegung einer Sperre beginnt mit dem Start einer Task und endet mit ihr. Eine exklusive Sperre erlaubt nur
eine Task.
Exklusives Sperren
Software- und Organisations-Service GmbH
August 2014
Jobs
153
Eine Task, die eine Sperre belegt, lässt keine andere Task zu, die dieselbe Sperre beansprucht.
Deklaration:
<config>
<locks>
<lock name="lock_name"/>
…
</locks>
Anwendung:
<job>
<lock.use lock="lock_name"/>
Nicht exklusives Sperren
Eine Sperre kann nicht-exklusiv von mehreren Jobs belegt werden.
Die Zahl der nicht-exklusiven Belegungen lässt sich begrenzen.
<lock name="lock_name" max_non_exclusive="2"/>
<job name="my_database_job">
<lock.use lock="lock_name" exclusive="no"/> …</job>
<job name="my_other_database_job">
<lock.use lock="lock_name" exclusive="no"/> …</job>
<job name="switch_database">
<lock.use lock="lock_name"/> …</job>
Die ersten beiden Jobs können gleichzeitig ablaufen, aber keiner der ersten beiden Jobs kann mit dem dritten
zusammen ablaufen, der die Sperre exklusiv beansprucht.
2.3.2 Sperren in Job-Ketten
Da Sperren von Tasks belegt werden, können sie in Job-Ketten verwendet werden, wenn die Tasks der einzelnen
Job-Knoten sich nach Ausführung beenden. Dazu muss das Attribut idle_timeout idealerweise auf 0 gesetzt sein.
Software- und Organisations-Service GmbH
August 2014
Jobs
154
2.4 Externe Job-Verarbeitung mit Agenten
Jobs können auf einem entfernten JobScheduler ausgeführt werden, wenn dieser als Agent konfiguriert ist. Nur
Agenten erlauben es, remote Kommandos von aufrufenden Schedulern entgegen zu nehmen.
Agenten zeichnen sich durch folgenden Merkmale aus:
•
Agenten müssen keinen live-folder haben.
•
Evtl. vorhandene lokale Jobs werden nicht ausgeführt. Das gilt auch für JobScheduler Standardjobs wie
scheduler_event_service.
•
Wird die Ausführung lokaler Jobs unterdrückt, wird dies mit einer entsprechenden Meldung protokolliert.
•
Interne Jobs (scheduler_file_order_sink und scheduler_web_service) werden nicht ausgeführt.
•
Nur Agenten sind in der Lage, remote Kommandos aufrufender JobScheduler auszuführen. Wird versucht ein
remote Kommando auf einem JobScheduler auszuführen, der kein Agent ist, wird dies mit einer
Fehlermeldung protokolliert.
Entfernt ausgeführte Jobs verhalten sich gegenüber dem aufrufenden JobScheduler so wie lokal ausgeführte Jobs.
Lediglich die Rechenlast wird auf einen anderen JobScheduler übertragen.
Das bedeutet z.B., dass alle API-Aufrufe sich auf das lokale JobScheduler Objekt beziehen.
Die Protokollausgaben des Jobs, sowie der Endzustand und eventuelle Fehler werden an den aufrufenden
JobScheduler geleitet.
Es ist möglich dass eine JobScheduler Installation gleichzeitig JobScheduler und JobScheduler Agent ist, indem
sie mit den entsprechenden Lizenzschlüsseln gestartet wird.
2.4.1 Verwendung
Überwiegend werden JobScheduler mit der Ausführung von Jobs beauftragt, die auf einem anderen physikalischen
Rechner installiert sind.
Beispiele für die Verwendung:
1.
Das Verfahren dient dem Load Balancing.
2.
Es können Software-Installationen verwendet werden, die sich nicht auf dem lokalen Rechner befinden.
3.
Es können Hardware-Komponenten verwendet werden, die nur von einem anderen Rechner erreichbar sind
(z.B. Drucker).
2.4.2 Voraussetzungen
1.
Einstellungen in der Firewall
Der lokale JobScheduler muss den Agenten erreichen können. Alle Sicherheitseinstellungen in den Firewalls
müssen das berücksichtigen. Für die Kommunikation in Richtung Agent muss der Port des Agenten in der
Firewall freigeschaltet sein. In der entgegengesetzten Richtung verbindet sich die Task mit dem aufrufenden
JobScheduler über einen Port <=59999 abwärts zählend pro laufende Task. Entsprechend der erwarteten
Anzahl Tasks müssen diese Ports in der Firewall freigeschaltet sein.
2.
Security-Einstellungen in der JobScheduler Konfiguration
Der Agent muss im Security Element den aufrufenden JobScheduler legitimieren.
Beispiel
<security ignore_unknown_hosts="no">
Software- und Organisations-Service GmbH
August 2014
Jobs
155
<allowed_host host="123.456.89.1" level="all"/>
</security>
3.
Beide JobScheduler müssen gestartet sein.
2.4.3 Konfiguration
Die Job-Definition steht in der Konfigurationsdatei des lokalen, aufrufenden JobScheduler.
Um einen Job auf einem Agenten ausführen zu lassen, sind beim lokalen, aufrufenden JobScheduler folgende
Konfigurationen nötig:
1.
Es muss eine Prozessklasse angelegt werden, und in ihr das Attribut <process_class
remote_scheduler=""> gesetzt sein. Dadurch werden alle Jobs, die dieser Prozessklasse zugeordnet sind,
extern ausgeführt.
Beispiel
<process_classes>
<process_class name="remote"
max_processes="3"
remote_scheduler="remoteHost:4445"/>
</process_classes>
2.
Der Job muss der Prozessklasse zugeordnet werden,
siehe <job process_class="…">
2.4.4 Monitor-Script
Die zu einem Job gehörenden Monitor-Scripte werden ebenfalls am Agenten ausgeführt. So gibt z.B. dieses
Testscript den Rechnernamen des Agenten aus.
function spooler_process_before() {
spooler_log.info("host:tcp_port:" + spooler.tcp_port);
var localhost = new java.net.InetAddress.getLocalHost();
hostname = localhost.getHostName();
ip = localhost.getHostAddress();
spooler_log.info("==>" + hostname + ":::"+ ip);
return true;
}
2.4.5 Kontext der API-Aufrufe
Alle API-Aufrufe beziehen sich auf den lokalen, aufrufenden JobScheduler. Allerdings liefern einige Methoden
Werte des Agenten und nicht des aufrufenden JobSchedulers zurück:
Software- und Organisations-Service GmbH
August 2014
Jobs
•
•
•
•
156
Spooler.directory
Spooler.log_dir
Spooler.ini_path
Spooler.include_path
2.4.6 Konfigurations-Dateien>
Alle Einstellungen werden beim lokalen, aufrufenden JobScheduler gelesen.
Einige Einstellungen werden vom Agenten statt vom lokalen, aufrufenden JobScheduler übernommen:
•
•
•
•
•
sos.ini (Abschnitt [java], Eintrag javac=…)
factory.ini (Abschnitt [spooler], Eintrag tmp=…)
<config java_options="…">
<config java_class_path="…">
<config include_path="…">
2.4.7 Protokolldateien
Protokollausgaben werden in die Dateien des lokalen, aufrufenden JobSchedulers geschrieben. Das betrifft sowohl
das Auftragsprotokoll als auch das Task-Protokoll. Ausgaben nach stdout und stderr werden in die
Protokolldateien des lokalen, aufrufenden JobSchedulers übernommen. Andere Protokollausgaben, die der
JobScheduler protokolliert, werden in die Protokolldatei des Agenten geschrieben.
Software- und Organisations-Service GmbH
August 2014
Auftragssteuerung und Dateiverarbeitung
157
3 Auftragssteuerung und Dateiverarbeitung
3.1 Aufträge und Job-Ketten
Ein Auftrag ist die Anweisung eine Job-Kette eine Reihe von Jobs auszuführen. Ein Auftrag kann sofort ausgeführt
werden oder zu einem konfigurierbaren Ereignis, z.B. zu bestimmten Terminen, Wochentagen etc. oder bei
Eintreffen von Dateien in einem Verzeichnis.
Eine Job-Kette ist wie ein Fließband, durch das die Aufträge laufen, die von einzelnen Maschinen, den Jobs,
nacheinander verarbeitet werden. Zur Verarbeitung eines Auftrags führt ein Job genau einen Schritt aus. Dabei
ändert sich der Zustand des Auftrags, der über die nächste Stelle in der Job-Kette entscheidet, bis das Ende der
Job-Kette erreicht ist.
Innerhalb der Job-Kette hat ein Auftrag eine Kennung, die ihn identifiziert sowie einen lesbaren Titel. Er hat einen
Zustand, der sich nach jeder Verarbeitung durch einen Job ändert. Ein Auftrag kann Parameter beinhalten, die an
alle Jobs einer Job-Kette weitergegeben werden und er kann eine Nutzlast tragen, d.h. ein individuelles XML
Dokument, das er den Jobs zur Verfügung stellt.
Aufträge ermöglichen die Wiederverwendbarkeit von Jobs und Job-Ketten: Einer Job-Kette kann exakt ein Auftrag
zugeordnet sein und den Zeitpunkt von deren Ausführung definieren. Diese Konfiguration wird häufig verwendet,
wenn jeder Job nur in einer einzigen Job-Kette auftritt und die Parametrisierung pro Job erfolgt.
Es können allerdings auch mehrere Aufträge für dieselbe Job-Kette konfiguriert werden, in diesem Fall können den
Aufträgen unterschiedliche Parameter mitgegeben werden, die an die Jobs durchgereicht werden, so dass
dieselben Jobs für unterschiedliche Zwecke eingesetzt werden können.
Siehe die Klasse Order .
Aufträge können per TCP mit dem Kommando <add_order> übergeben werden.
Darüber hinaus bietet die HTML-Oberfläche (Seite 174) des JobSchedulers Operationen zum manuellen Starten
von Aufträgen.
3.1.1 Job-Ketten
Job-Ketten definieren eine Abfolge von Jobs, deren Ausführung durch einen Auftrag ausgelöst wird. Sie definieren
Job-Abhängigkeiten für die erfolgreiche und fehlerhafte Ausführung von Jobs. Sie sind wiederanlauffähig, d.h. der
JobScheduler speichert den Zustand eines Auftrags innerhalb einer Job-Kette persistent in einer Datenbank und
restauriert einen Auftrag nach dem Wiederanlaufen innerhalb der Job-Kette für den Job, an dem die Verarbeitung
abgebrochen wurde.
Die Job-Ketten sind bei den Klassen Job_chain und Job_chain_node beschrieben.
Siehe auch <job_chains> (Seite 47).
Zur Verwendung innerhalb von Job-Ketten müssen Jobs mit <job order="yes"> definiert sein. Andernfalls sind
sie als standalone Jobs separat aufrufbar.
Software- und Organisations-Service GmbH
August 2014
Auftragssteuerung und Dateiverarbeitung
158
3.1.2 Auftragswarteschlange und Tasks
Jeder auftragsgesteuerte Job hat eine Auftragswarteschlange, die die Aufträge aufnimmt, die der Job verarbeiten
soll. Sobald ein Auftrag in der Warteschlange ist und die <run_time> dies zulässt, startet der JobScheduler eine
Task. Wenn mehrere Aufträge in der Warteschlange sind und der Job mehrere Tasks erlaubt ( <job tasks="…"> ),
dann startet der JobScheduler mehrere Tasks.
Der JobScheduler übergibt einen Auftrag einer Task, indem er in Task.order den Auftrag ablegt und
spooler_process() aufruft. spooler_process() endet mit true oder false, was über die nächste Stelle in der
Job-Kette entscheidet (s. Job_chain ).
3.1.3 Verzeichnisüberwachung mit Dateiaufträgen
Zu Aufträgen, die aus Dateien eines Verzeichnisses entstehen, siehe Verzeichnisüberwachung mit Dateiaufträgen
(Seite 159).
3.1.4 Priorität
Aufträge mit höherer Priorität Order.priority stellt der JobScheduler an den Anfang der Warteschlange.
3.1.5 Wann enden die Tasks?
Wenn kein Auftrag mehr zu verarbeiten ist, lässt der JobScheduler die Tasks stehen, solange die <run_time> gilt.
Sie sind dann im Zustand running_waiting_for_order.
Mit <job idle_timeout="dauer"> können Sie eine Frist bestimmen, nach der der JobScheduler eine wartende
Task automatisch beendet. Diese Frist sollte auf z.B. 30 Sekunden eingestellt werden, um während der
Verarbeitungspausen Ressourcen freizugeben.
Wenn der JobScheduler für einen anderen Job eine Task starten will, die Prozessklasse aber erschöpft ist, die die
Anzahl gleichzeitig ablaufender Tasks festlegt, dann beendet er automatisch eine Task mit derselben
Prozessklasse, die im Zustand running_waiting_for_order ist.
Sie können eine Task mit Task.end() , <kill_task> und <modify_job cmd="end"> beenden.
Die Task endet, wenn spooler_process() nicht implementiert ist. Der Auftrag wird in den Folgezustand versetzt.
3.1.6 Beschleunigung des Auftragsdurchlaufs
Auftragsgesteuerte Jobs haben eine eigene Priorisierung. Die Einstellung <job priority="…"> kann hier nicht
verwendet werden, sie wirkt nicht.
Aufträge, die in der Job-Kette weiter fortgeschritten sind, sollen bevorzugt verarbeitet werden. Damit werden Staus
vermieden und die ersten Aufträge werden schneller abgeschlossen. Das erreicht der JobScheduler durch
Bevorzugung der Jobs, die weiter am Ende der Job-Kette stehen als andere. Die Maschinen am Ende des
Fließbands laufen flotter als die am Anfang.
Auftragsgesteuerte Jobs haben Vorrang vor nicht auftragsgesteuerten Jobs.
Software- und Organisations-Service GmbH
August 2014
Auftragssteuerung und Dateiverarbeitung
159
3.1.7 Datenbank
Zur persistenten Speicherung der Auftragswarteschlangen und zur Auftragshistorie lesen Sie hier (Seite 130).
3.2 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 JobScheduler ü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> (Seite 42), <file_order_source> (Seite 30) und <file_order_sink> (Seite 29).
3.2.1 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 . Variable_set.value()
enthält den Pfad, derselbe Wert wie Order.id . Diese für den JobScheduler reservierte Variable macht
einen Auftrag zum Dateiauftrag.
3.2.1.1 Reihenfolge der Dateiaufträge
Die ältesten Dateien (die mit der am weitesten zurückliegenden letzten Änderung) werden zuerst berücksichtigt.
3.2.1.2 Mehrere Auftragsquellen
Eine Job-Kette kann mehrere Auftragsquellen haben. Der JobScheduler berücksichtigt sie in der angegebenen
Reihenfolge.
Software- und Organisations-Service GmbH
August 2014
Auftragssteuerung und Dateiverarbeitung
160
3.2.2 Der Dateiauftrag überwacht die Datei
Der JobScheduler entfernt einen Dateiauftrag, wenn die dazugehörige Datei nicht mehr im Verzeichnis steht und
•
der Dateiauftrag noch nicht einem Job übergeben wurde
[warn]
•
File has been removed, so the file order is being removed too
SCHEDULER-982
der Dateiauftrag auf der Schwarzen Liste steht
[info]
SCHEDULER-981
File on blacklist has been removed
Dateiaufträge, die in Ausführung sind, sind nicht betroffen.
Dieser Abgleich wird durchgeführt,
•
•
wenn der JobScheduler das Verzeichnis liest,
wenn der JobScheduler den Dateiauftrag zum ersten Mal einem Job übergibt.
3.2.3 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 JobScheduler eine Warnung aus und der Dateiauftrag ist
erledigt.
[warn]
SCHEDULER-339
File does not exist and can therefore neither be moved nor removed:
Wenn die Datei sich nicht entfernen bzw. verschieben lässt, gelangt der Auftrag auf die Schwarze Liste.
3.2.3.1 Datei verschieben
<file_order_sink state="…" move_to="directory_path">
Eine Datei gleichen Namens im Zielverzeichnis wird ohne Warnung überschrieben.
3.2.3.2 Datei entfernen
<file_order_sink state="…" remove="yes">
3.2.4 Schwarze Liste
Wenn ein Dateiauftrag ausgeführt ist (einen Endzustand erreicht hat), aber die Datei noch vorhanden ist, dann
setzt der JobScheduler den Auftrag auf die Schwarze Liste.
[warn]
SCHEDULER-340
File still exists. Order has been set on the blacklist
Dort bleibt er bis
Software- und Organisations-Service GmbH
August 2014
Auftragssteuerung und Dateiverarbeitung
•
der JobScheduler beim Lesen des Verzeichnisses feststellt, dass die Datei entfernt worden ist
[info]
•
161
SCHEDULER-981
File on blacklist has been removed
das Kommando <remove_order> ausgeführt wird.
Damit wird verhindert, dass die Datei sofort zu einem neuen Dateiauftrag führt.
3.2.5 Verzeichnis-Fehler
Wenn die Verzeichnisüberwachung auf einen Fehler läuft, zum Beispiel weil das Verzeichnis abgehängt worden ist,
dann gibt der JobScheduler eine Warnung aus und erzeugt eine eMail (die Einstellungen aus factory.ini
(Abschnitt [spooler]) gelten).
Der JobScheduler 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 JobScheduler eine entsprechende eMail und gibt diese Meldung aus:
[info]
SCHEDULER-984
Recovered from previous error in directory
3.2.5.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 ), 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:
3.2.6 Wann wird das Verzeichnis gelesen?
Sobald der erste Job zum ersten Mal bereit ist, einen Auftrag auszuführen, liest der JobScheduler 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 JobScheduler später die weiteren Dateiaufträge
erzeugt. Die Meldungen dazu sind:
[info]
SCHEDULER-985
number more file orders will be added later, after previous orders have been
processed
[info]
SCHEDULER-986
Continuing reading buffered directory (as of time)
Der JobScheduler liest das Verzeichnis erneut, wenn
•
•
•
alle Dateien dem ersten Job übergeben worden sind,
dieser für einen weiteren Auftrag bereit ist,
und die mit <file_order_source repeat="…"> einstellte Periode abgelaufen ist.
3.2.6.1 Verzeichnisüberwachung durch Microsoft® Windows®
Unter Windows lässt der JobScheduler außerdem das Verzeichnis vom Betriebssystem überwachen. Eine
Signalisierung veranlasst den Scheduler, das Verzeichnis vor Ablauf der Periode zu lesen. Damit reagiert der
JobScheduler sofort auf eine neue Datei.
Software- und Organisations-Service GmbH
August 2014
Auftragssteuerung und Dateiverarbeitung
162
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.
3.2.7 Auftragsgesteuerte Nicht-API-Jobs (<process> und <script language="shell">)
Einen auftragsgesteuerten <process> -Job startet der JobScheduler für jeden Dateiauftrag.
Die Umgebungsvariable enthält den Dateipfad.
3.3 Verzeichnisüberwachung
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 JobScheduler 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"> ).
3.3.1 Was ist eine Änderung eines Verzeichnisses?
Wenn eine Datei oder ein Unterverzeichnis hinzugefügt, gelöscht oder umbenannt wird.
3.3.2 Mit Regulärem Ausdruck filtern
Der Methode Job.start_when_directory_changed() können Sie einen Regulären Ausdruck (nach POSIX
1003.2) übergeben. Der JobScheduler 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.
3.3.3 Welches Verzeichnis hat sich geändert?
Wenn Sie mehrere Verzeichnisse überwachen, gibt der Aufruf Task.changed_directories() die Namen der
geänderten Verzeichnisse zurück, durch Semikolon getrennt.
3.3.4 Welche Dateien stehen im Verzeichnis?
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.
Software- und Organisations-Service GmbH
August 2014
Auftragssteuerung und Dateiverarbeitung
163
3.3.5 Fehler bei der Verzeichnisüberwachung
Wenn z.B. ein Verzeichnis nicht mehr zugreifbar ist (gelöscht oder nicht mehr erreichbar), gilt das als Änderung
und der JobScheduler startet eine Task.
Ein wiederholter Aufruf von Job.start_when_directory_changed() führt dann zu einem Fehler.
3.3.6 Beispiel
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>
Software- und Organisations-Service GmbH
August 2014
Auftragssteuerung und Dateiverarbeitung
164
</job>
</jobs>
</config>
</spooler>
3.4 Verteilte Aufträge
3.4.1 Load Balancing mit verteilten Aufträgen
Ein JobScheduler Cluster kann verwendet werden, um Aufträge auf mehreren Hosts zu verarbeiten. Dies kann zum
Load Balancing genutzt werden, um Verarbeitungszeiten durch einsatz weiterer Hardware zu minimieren.
In einem Cluster zeigen alle JobScheduler ihre Verfügbarkeit durch das Versenden von Herzschlägen an. Alle
JobScheduler prüfen, ob die jeweils anderen JobScheduler verfügbar sind. Stellt ein JobScheduler fest, dass vom
anderen JobScheduler die Herzschläge über einen längeren Zeitraum (ca. 1-2 Minuten) ausbleiben, so übernimmt
dieser die Verarbeitung der angefangenen Aufträge.
Die Voraussetzungen für die Operation eines JobScheduler Clusters für verteilte Aufträge sind schematisch in der
folgende Zeichnung abgebildet, und werden im Detail in den nächsten Abschnitt beschreiben.
Software- und Organisations-Service GmbH
August 2014
Auftragssteuerung und Dateiverarbeitung
165
Verteilte Aufträge können während ihres Weges durch die Job-Kette von verschiedenen JobSchedulern verarbeitet
werden. Die Übernahme der Verarbeitung eines Auftrags in einem anderen Job-Knoten durch einen anderen
JobScheduler ist schematisch in der folgende Zeichnung abgebildet:
Software- und Organisations-Service GmbH
August 2014
Auftragssteuerung und Dateiverarbeitung
166
3.4.1.1 Voraussetzungen für Verteilte Aufträge
•
•
•
•
•
Alle JobScheduler des Clusters verwenden die selbe Datenbank. Es werden die Datenbanksysteme Oracle,
DB2, MySQL und Postgres unterstützt.
Alle JobScheduler verwenden die selbe Konfigurationsdatei bzw. eine genaue Kopie.
Alle JobScheduler werden mit der gleichen Scheduler-ID gestartet.
Alle JobScheduler werden mit der Option -distributed-orders gestartet.
Alle JobScheduler haben Zugriff auf Resourcen, die von den Jobs der verteilten Job-Kette benötigt werden
(z.B. überwachte Verzeichnisse). Gemeinsam genutzte Verzeichnisse sind auf allen Systemen auf den
gleichen Pfad gemountet (oder verlinkt).
Software- und Organisations-Service GmbH
August 2014
Auftragssteuerung und Dateiverarbeitung
167
3.4.1.2 Starten des JobScheduler Clusters für verteilte Aufträge
Die JobScheduler, die den Cluster bilden, werden in beliebiger Reihenfolge gestartet. Es können während der
Laufzeit beliebig JobScheduler entfernt oder hinzugefügt werden. Beim entfernen von JobScheduler Instanzen,
sollten diese, wenn möglich, normal beendet (Terminate) werden, damit sie die Möglichkeit haben, Aufträge zu
beenden, die gerade verarbeitet werden.
3.4.1.3 Erzeugen verteilter Aufträge
Verteilte Aufträge können entweder per <add_order> Befehl oder per Verzeichnisüberwachung erzeugt werden.
3.4.1.4 Verteilte Aufträge durch add_order
Es kann entweder das XML-Kommando <add_order> oder die API-Funktion Job_chain.add_order() verwendet
werden. Es ist dabei egal an welchen JobScheduler das Kommando geschickt wird beziehungsweise auf welchem
JobScheduler der Befehl ausgeführt wird. Der Auftrag wird dem gesamten Cluster zur Verarbeitung bereitgestellt.
3.4.1.5 Verteilte Dateiaufträge
Verteilte Dateiaufträge werden per <file_order_source> in einer verteilten Job-Kette konfiguriert. Jeder
JobScheduler des Clusters überwacht das Verzeichnis und kann Dateiaufträge erstellen. Ein Dateiauftrag wird
nicht notwendigerweise von dem JobScheduler verarbeitet, der ihn erstellt hat.
3.4.1.6 Standalone-Jobs in verteilten Schedulern
Eigenständige Jobs, die keine Aufträge verarbeiten, werden in einem JobScheduler Cluster von dem JobScheduler
ausgeführt, in dem sie konfiguriert werden.
3.4.1.7 Verteilungsalgorithmen
Die Art der Verteilung kann durch das Setzen des globalen Parameters scheduler.order.distributed.balanced
eingestellt werden:
•
Verteilung bei Überlast:
Ein JobScheduler übernimmt die Ausführung eines verteilten Auftrages erst dann, wenn der derzeit
ausführende JobScheduler ausgelastet ist, d.h. wenn die Anzahl der zugelassenen Prozesse erreicht ist. Das
ist das Standardverhalten des JobSchedulers.
siehe auch <job tasks="…"> (Seite 37) und <process_class attribute_max_processes="…"> (Seite 59).
•
Gleichmässige Verteilung:
Die Taks verteilter Aufträge werden gleichmässig auf die JobScheduler des Clusters verteilt.
Software- und Organisations-Service GmbH
August 2014
Protokolle und eMail-Versand
168
4 Protokolle und eMail-Versand
4.1 Protokolle
Der JobScheduler schreibt seine Protokolle in das mit der Option -log-dir eingestellte Verzeichnis.
Die Meldungen sind numeriert, siehe »Meldungen des Schedulers« (Seite 226).
Hauptprotokoll
Das Hauptprotokoll fast alle Protokolle zusammen. Der Dateiname wird aus Scheduler-Id, Datum und Uhrzeit
gebildet, z.B. scheduler-2004-08-24-104111.log.
Jobprotokolle
Für jeden Job erstellt der JobScheduler ein Jobprotokoll mit den Starts der Tasks und eingetroffenen Aufträgen.
Beispiel: job.mein_job.log
Zeichen im Jobnamen, die nicht im Dateinamen verwendet werden können, tauscht der JobScheduler gegen "_".
Taskprotokolle
Für jeden Task erstellt der JobScheduler ein Taskprotokoll. Der Dateiname wird aus dem Jobnamen und, wenn
mehrere Tasks zugelassen sind, der Task-Id gebildet, z.B.: task.mein_job.log und task.ein_job.1234.log.
Taskprotokolle mit Task-Id werden nach Ende der Task gelöscht.
Auftragsprotokolle
Für jeden Auftrag erstellt der JobScheduler ein Auftragsprotokoll mit den Ausgaben aller Tasks, die der Auftrag
durchläuft. Der Dateiname wird aus der Job-Kette und der Auftrags-Id gebildet, z.B.:
order.meine_Job-Kette.9876.log. Das Auftragsprotokoll wird nach Ende des Auftrags gelöscht.
scheduler.log
Zur Fehlerdiagnose kann der JobScheduler das scheduler.log schreiben. In factory.ini (Abschnitt [spooler],
Eintrag log= …) stellen sie den Dateinamen ein. In dieser Dokumentation steht factory.ini für den hier
eingestellten Dateinamen.
Hier die Liste der Log-Kategorien (Seite 171).
4.1.1 Umfang
Mit -log-level und Log.level kann die Stufe (error, warn, info, debug bis debug9) eingestellt werden, ab der
Protokollzeilen gelten.
4.1.2 Meldungs-Codes
Die Meldungen sind mit Codes versehen, z.B. SCHEDULER-900. Hier ist eine Liste der Meldungs-Codes (Seite 226)
des Schedulers.
Software- und Organisations-Service GmbH
August 2014
Protokolle und eMail-Versand
169
4.1.3 Plattenplatzmangel
Wenn nicht genug Plattenplatz beim Öffnen einer Protokolldatei vorhanden ist, gibt es einen Fehler. Wenn das
Hauptprotokoll nicht geöffnet werden kann, bricht der JobScheduler ab.
Wenn nicht genug Plattenplatz vorhanden ist, um ein Protokoll fortzuschreiben, hält der JobScheduler an. Er
reagiert auf über TCP, UDP oder HTTP übergebene Kommandos.
Das Kommando <modify_spooler> wirkt nur eingeschränkt.
Wenn wieder Plattenplatz bereit steht, können Sie den JobScheduler fortsetzen mit <modify_scheduler
cmd="continue"/>.
Die Datei scheduler.log ist von diesem Verfahren nicht betroffen. Fehler werden hier ignoriert.
4.1.4 Ablage in den Datenbank
Der JobScheduler kann die Task- und Auftragsprotokolle mit in die Historie schreiben. Voraussetzung sind
•
•
•
•
•
Betrieb mit einer Datenbank (Seite 130),
die Einstellung factory.ini (Abschnitt [spooler], Eintrag history= …)), um die Historie einzuschalten,
die Einstellung factory.ini (Abschnitt [spooler], Eintrag history_with_log= …) fürs Task-Protokoll,
die Einstellung factory.ini (Abschnitt [job], Eintrag history_with_log= …) für bestimmte Jobs,
die Einstellung factory.ini (Abschnitt [spooler], Eintrag order_history_with_log= …) fürs
Auftragsprotokoll.
4.1.5 Programmschnittstelle
Die Klasse Log beschreibt die Protokolle und erlaubt verschiedene Einstellungen.
4.1.6 eMail-Versand
Der JobScheduler kann das Task-Protokoll per eMail verschicken. Lesen Sie weiter im Kapitel eMail (Seite 169).
4.1.7 Anzeigen der Protokolle
Siehe Kommandos <show_state> (Seite 202), <show_task> (Seite 203) und <show_history> (Seite 199).
Mit einem Browser können Sie den eingebauten HTTP-Server (Seite 174) ansprechen und sich ein Protokoll
fortlaufend anzeigen lassen.
4.2 eMail-Versand
4.2.1 Einstellungen zur eMail
Die Einstellungen für eine eMail können Sie hier vornehmen: factory.ini (Abschnitt [spooler], Eintrag smtp= …
)
Software- und Organisations-Service GmbH
August 2014
Protokolle und eMail-Versand
170
factory.ini (Abschnitt [spooler], Eintrag log_mail_subject= …)
factory.ini (Abschnitt [spooler], Eintrag log_mail_from= …)
factory.ini (Abschnitt [spooler], Eintrag log_mail_to= …)
factory.ini (Abschnitt [spooler], Eintrag log_mail_cc= …)
factory.ini (Abschnitt [spooler], Eintrag log_mail_bcc= …)
Oder wenn Sie besondere Einstellungen für einen bestimmten Job vornehmen wollen: factory.ini (Abschnitt
[job], Eintrag log_mail_subject= …)
factory.ini (Abschnitt [job], Eintrag log_mail_from= …)
factory.ini (Abschnitt [job], Eintrag log_mail_to= …)
factory.ini (Abschnitt [job], Eintrag log_mail_cc= …)
factory.ini (Abschnitt [job], Eintrag log_mail_bcc= …)
Oder an der Programmschnittstelle:
spooler_log stellt mit Log.mail das Objekt Mail bereit, über dessen Methoden Sie Absender, Empfänger, Betreff
usw. einstellen können.
Beispiel (in Java)
spooler_log.mail().set_to( "[email protected]" );
4.2.2 eMails nach dem Ende einer Task
Wenn eine Task endet, kann der JobScheduler eine eMail mit dem Task-Protokoll verschicken.
Ob nach Ende einer Task das Protokoll verschickt werden soll, bestimmen Sie mit diesen Einstellungen:
factory.ini (Abschnitt [spooler], Eintrag mail_on_success= …)
factory.ini (Abschnitt [spooler], Eintrag mail_on_process= …)
factory.ini (Abschnitt [spooler], Eintrag mail_on_error= …)
Und speziell für einen Job: factory.ini (Abschnitt [job], Eintrag mail_on_success= …)
factory.ini (Abschnitt [job], Eintrag mail_on_process= …)
factory.ini (Abschnitt [job], Eintrag mail_on_error= …)
Oder an der Programmschnittstelle:
Mit dem Aufruf Log.mail_it können Sie einstellen, ob der JobScheduler beim Ende der Task das Protokoll sendet.
4.2.3 Rangfolge der Einstellungen
1.
2.
3.
4.
Das Job-Skript kann Einstellungen mit der Klasse Mail vornehmen.
Im Fehlerfall setzt der JobScheduler den Betreff, überschreibt also die Einstellung Mail.log_mail_subject
des Jobs.
Das eMail-XSLT-Stylesheet ( <config mail_xslt_stylesheet="…"> ), kann die Einstellungen ändern.
Leere Einstellungen werden mit den Angaben aus
Software- und Organisations-Service GmbH
August 2014
Protokolle und eMail-Versand
171
factory.ini (Abschnitt [job]) und
factory.ini (Abschnitt [spooler]) gefüllt.
4.2.4 eMails, wenn der JobScheduler wegen eines Fehlers sich beendet
Für diese eMails werden die Einstellungen im Abschnit [spooler] der Datei factory.ini verwendet.
Wenn ein Fehler auftritt, bevor die Option -ini berücksichtigt werden konnte, verwendet der JobScheduler die
Einstellungen aus der Datei factory.ini mit unverändertem Namen.
Wenn der JobScheduler als Dienst oder Daemon läuft und ein Fehler auftritt, der so ernst ist, dass der
JobScheduler abbrechen muss, verschickt er eine eMail mit der Fehlermeldung.
Wenn ein Datenbankfehler auftritt, verschickt der JobScheduler eine eMail. Fehler, die bei den Versuchen
auftreten, die Datenbank erneut zu öffnen, führen nicht zu einer eMail.
Wenn der JobScheduler nach einem Fehler den Datenbankbetrieb aufgibt, schickt er eine eMail.
4.2.5 Installation mit JavaMail
Für den eMail-Versand mit JavaMail werden folgende Dateien im class_path benötigt.
sos.mail.jar
(wird mit dem JobScheduler geliefert)
mail.jar
(Sun Microsystems, Inc.)
smtp.jar
(Sun Microsystems, Inc.)
activation.jar
(Sun Microsystems, Inc.)
Siehe sos.ini (Abschnitt [java], Eintrag class_path= …).
4.3 Log Categories
Kategorie
Default¹
all
All categories (with exception of explicit categories)
com
COM-Operations
com.invoke
Calling a COM object method
env
Environment variables
exception
Particular error codes
exception.*
default
All error codes
exception.D310
nur explizit
End of file
exception.D311
nur explizit
Expression not found
factory
DocumentFactory
factory.parameter
factory.processor
Software- und Organisations-Service GmbH
Factory Processor (hostole.dll)
August 2014
Protokolle und eMail-Versand
Kategorie
172
Default¹
file
file.directory
file.mmap
mmap()
hostole
HostOLE calls (with exception of the factory
processor)
ini
Windows call GetPrivateProfile()
Read the .ini file: GetPrivateProfile().
java
Java
jdbc
JDBC Calls
mail
mutex
nur explizit
Mutual exclusion locks, blocking for thread
serialisation
object_server
JobScheduler interface for tasks running in their
own processes
object_server.call
Method Call
object_server.continue
object_server.Invoke
COM operation
object_server.push
Stack-Operation for nested method calls
object_server.QueryInterface
COM operation
object_server.wait
odbc
ODBC calls
rtf
RTF Processor
rtf.learn
Learned (unknown) RTF codes
rtf.map_next_line
Positions of script line numbers found in RTF
documents
rtf.merge
Merge different templates
scheduler
implizit an
JobScheduler
scheduler.call
implizit an
Start and end call of a job method, e.g.
spooler_process()
scheduler.cluster
Cluster operation
scheduler.directory
Open a directory
scheduler.file_order
<file_order_source>
scheduler.http
HTTP server
scheduler.log
Access to protocol files
scheduler.nothing_done
When a job is idle
scheduler.order
implizit an
Operations on orders (temporary payload setting)
scheduler.service
implizit an
Windows service controller
Software- und Organisations-Service GmbH
August 2014
Protokolle und eMail-Versand
Kategorie
173
Default¹
scheduler.signal
scheduler.wait
The JobScheduler enters the waiting state
scheduler.xml
XML/DOM operations
socket
Socket operations (network)
socket.accept
System call accept(): accept TCP connections
socket.close
System call close(): close socket
socket.connect
System call connect(): establish TCP connection
socket.data
nur explizit
Data from recv() and send()
socket.listen
System call listen(): waiting for TCP connection
request (listening)
socket.recv
System call send(): receive file
socket.select
System call select(): waiting for TCP result
socket.send
System call send(): send file
socket.setsockopt
System call setsockopt()
socket.shutdown
System call shutdown(): end connection
sossql
SQL-Processor (file type sossql)
sossql.get_key
Operation get_key()
spidermonkey
The Spidermonkey JavaScript implementation
spidermonkey.callback
nur explizit
Spidermonkey call backs
spidermonkey.idispatch
nur explizit
COM object management
windows
Betriebssystem Microsoft Windows
windows.PeekMessage
Aufruf PeekMessage()
Many of the entries made in the log file (scheduler.log) are categorised. These categories are used to regulate
whether or not an entry is made in a log file.
A log category is specified in front of the file name, with a ">" symbol inserted between the category and the file
name. Multiple categories are separated by an empty space. For example (in an .ini file): log = scheduler.*
socket.* >c:/tmp/scheduler.log.
The special category all selects all categories other than those which must be explicitly selected.
Log file categories are organised in hierarchies. Categories can be selected together with their subcategories by
appending an asterisk (".*") to the category name thus: scheduler.*.
See also the commands:
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
174
5 Kommunikation und Bedienung
5.1 HTTP Server und Web Services
5.1.1 Web Services
Der JobScheduler kann die Ausführung von Jobs und Job-Ketten als Web Services kapseln. Dazu nimmt der
JobScheduler über den eingebauten HTTP-Server SOAP Anfragen entgegen.
Mit <web_service> können Web Services eingerichtet werden.
Verwendung und Beispiele zur Konfiguration sind in der Dokumentation »Web Service Tutorial« beschrieben.
5.1.2 Bedienung über einen Browser
Der JobScheduler verfügt über einen HTTP Server und stellt HTML-Seiten zu seiner Bedienung bereit. Sie können
den JobScheduler über einen Browser (Microsoft Internet Explorer und Firefox) steuern. Geben Sie z.B. die
Adresse http://localhost:4444 ein. localhost kann auch ein anderer Rechnername sein, und 4444 ist die
konfigurierte TCP-Portnummer des JobSchedulers.
Siehe <config tcp_port="…"> (Seite 20).
Siehe factory.ini (Abschnitt [spooler], Eintrag html_dir= …) (Seite 89).
The user interface is described in the "Built-In User Interface" section of this chapter (below).
5.1.3 Zugriffsschutz
Der JobScheduler lässt nur TCP- und HTTP-Verbindung zu von Rechnern, die mit <allowed_host> die Erlaubnis
bekommen haben.
Darüber hinaus kann HTTP-Authentifizierung mit dem Element <http.authentication> vereinbart werden.
5.1.4 Protokolle mit einem Browser zeigen
Während der JobScheduler ein Protokoll schreibt, können Sie es sich anzeigen lassen. Sie sehen stets den
neuesten Stand.
Die HTML-Oberfläche des JobSchedulers bietet hierfür die entsprechenden Operationen an. Der JobScheduler
verwendet folgende URLs für Protokolle:
Hauptprotokoll
http://localhost:4444/show_log?
Jobprotokoll
http://localhost:4444/show_log?job=jobname
Taskprotokoll
http://localhost:4444/show_log?task=task_id
Auftragsprotokoll
http://localhost:4444/show_log?job_chain=Job-Kette&order=
order_id
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
175
localhost ist localhost oder 127.0.0.1 oder der Name des Rechners, auf dem der JobScheduler abläuft.
5.1.5 Job-Beschreibung
Die Job-Beschreibung aus <description> kann mit diesem URL abgerufen werden:
http://localhost:4444/job_description?job=job
Die Beschreibung wird in HTML codiert erwartet.
5.1.6 Built-In Graphical User Interface
The JobScheduler can be operated using its own, built-in, web-based graphical user interface (GUI). Instructions
for accessing this interface were provided in the "Operation with a Browser (Seite 174)" section of this chapter
(above).
This interface is automatically installed and updated with the JobScheduler installation package.
The JobScheduler GUI is configured in the custom.js file, which is to be found in the JobScheduler
installation directory\config\html directory
This interface is intended for the operation of the JobScheduler - i.e. starting, monitoring and stopping the
JobScheduler itself, jobs & job chains, orders, and any locks and JobSchedulers operating in a cluster.
This interface should not be confused with the JobScheduler Editor (Seite 109), which is a GUI used to configure
the JobScheduler itself, jobs & job chains, orders using XML.
The JobScheduler GUI should also not be confused with the Managed Jobs Administration interface, which is a
part of the JobScheduler Managed Jobs package. The Managed Jobs Administration interface is a GUI for the
creation and monitoring jobs, job chains & orders and comes with a user administration. Further information about
the Managed Jobs Administration interface can be found in the »Managed Jobs Documentation«.
When first opened, the JobScheduler GUI appears as shown in the screenshot below and comprises three areas:
•
•
•
An upper menu bar, where the general configuration of the interface (language & update) is carried out; any
monitoring functions the JobScheduler is to carry out are shown and the configuration of the JobScheduler
itself in the XML configuration file (Seite 7) is shown.
Note that here the XML configuration file is shown "read-only" - to change the configuration, the JobScheduler
Editor (Seite 109) or an alternative XML editor should be used which has access to the JobScheduler
installation directory.
A central menu and status bar, providing access to the most important JobScheduler menus and status
information about the operation of the JobScheduler.
The "Update periodically" checkbox and the "Update" button are used to update the information shown in the
web interface either at regular intervals (when the checkbox is selected) or manually, as required (using the
button). The interval with which the regular updates of the interface are carried out is set using the Settings
dialog, which is accessed via the "Extras" button.
A working area initially showing a list of the jobs configured for the JobScheduler, which can be used to
provide information about other aspects of the JobScheduler operation such as the job chains, process
classes and locks by selecting the appropriately named menu tabs. Note that, should, for example, no locks
be configured then the "Locks" menu tab will not be shown.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
176
The main menu for the operation of the JobScheduler is shown in the next screenshot:
Detailed information about the state of one of the jobs listed in the main working area of the interface can be
obtained by clicking on the name of the job. This causes the right hand part of this area to divide and additional
areas showing status information about the job, about the task and about the taks queue to be displayed as can be
seen in the screen shot below:
The job status area also contains a menu providing the main commands necessary for controlling the job as shown
in the next screen shot:
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
177
The "Show description" item in the menu opens a new browser window containing the job description. Job
descriptions such as the one shown below can be written with the Job Editor. This editor combines documentation
of the job, its configuration and a generate function, where the job can be newly generated after changes to its
configuration have been made. It is so integrated in the JobScheduler installation that the JobScheduler
automatically takes account of changes in a job configuration without having to be restarted.
The documentation for the Job Editor can be read in the Job Documentation Editor tutorial.
Information about tasks carrying out a job is shown in the task area of the interface as shown in the next screen
shot:
A task menu is provided as shown in the following screen shot:
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
178
Information about any errors occuring in the execution of a job is shown in the interface job area:
If the JobScheduler is part of a JobScheduler cluster, providing backup, monitoriung and fail-over features, a
corresponding "Cluster" menu tab will be shown in the main working area of the interface. As can be seen in the
next screen shot, a button is provided to a menu for configuring cluster related aspects of the JobScheduler
operation:
The principles for using the JobScheduler GUI and which have been described in conjunction with the features
shown in the preceeding screen shots are followed for the aspects of the interface which have not been shown in
the screen shots. This means, for example, that use of the job chain part of the interface should follow intuitively.
Detailed information about the configuration and operation of the JobScheduler can be found in the following
sections of this documentation:
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
•
•
•
•
•
179
The XML Configuration (Seite 7) of the JobScheduler.
Jobs and Job Chains (Seite 144).
Orders (Seite 157).
Log files and errors (Seite 168).
Error messages (Seite 226).
5.2 XML-Kommandos
Die Kommandos können über TCP (z.B. telnet), über HTTP und über die Kommandozeilenoptionen -cmd und
-send-cmd gegeben werden.
Kommando
Antwort (eingepackt in <spooler><answer>)
<add_jobs>
<ok>
<add_order>
<ok> <order>
<job.why>
<job>
<job_chain.modify>
<ok>
<job_chain_node.modify>
<ok>
<kill_task>
<ok>
<licence.use>
<ok>
<lock>
<ok>
<lock.remove>
<ok>
<modify_hot_folder>
<ok>
<modify_job>
<ok>
<modify_order>
<ok>
<modify_spooler>
<ok>
<param>
<ok>
<param.get>
<param>
<params>
<ok>
<params.get>
<params>
<process_class>
<ok>
<process_class.remove>
<ok>
<remove_job_chain>
<ok>
<remove_order>
<ok>
<schedule.remove>
<ok>
<scheduler_log.log_categories.reset>
<ok>
<scheduler_log.log_categories.set>
<ok>
<scheduler_log.log_categories.show>
<log_categories>
<show_calendar>
<calendar>
<show_history>
<history>
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
180
Kommando
Antwort (eingepackt in <spooler><answer>)
<show_job>
<job>
<show_job_chain>
<job_chain>
<show_job_chains>
<job_chains>
<show_jobs>
<jobs>
<show_order>
<order>
<show_state>
<state>
<show_task>
<task>
<start_job>
<ok> <task>
<terminate>
<ok>
XML-Elemente
XML-Element <add_jobs>
<add_jobs >
job
</add_jobs>
Die Jobs werden mit temporary="yes" hinzugefügt und gestartet. Jeder Job wird gelöscht, sobald er endet.
Die Jobnamen müssen eindeutig sein.
Eltern Elemente
<commands> -
XML-Element <add_order>
<add_order
job_chain
id
replace
priority
title
state
web_service
at
end_state
= "name"
= "id"
= "yes|no"
= "zahl"
= "text"
= "text"
= "name"
= "timestamp"
= "text"
Startzeit des Auftrags
Zustand, vor dessen erfolgreichen Verlassen
der Auftrag enden soll
>
params
run_time
xml_payload
</add_order>
Parameter
XML-Nutzlast
Fügt einen neuen Auftrag hinzu.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
181
Wenn Sie das Element <params> angegeben, erstellt der JobScheduler ein Variable_set und stellt es dem Job in
Order.payload() zur Verfügung.
Beispiel:
<add_order job_chain="jobkette" id="1234" title="Mein erster Auftrag" state="100"
at="now+3:00">
<params>
<param name="ein_parameter" value="ein Wert"/>
</params>
</add_order>
Eltern Elemente
<commands> Attribute
job_chain="name"
Die Jobkette, in die der Auftrag eingetragen werden soll.
id="id"
Die Kennung des Auftrags (alphanumerisch).
replace="yes|no" (Initialwert:yes)
replace="no": Job_chain.add_order() wird gerufen.
replace="yes": Job_chain.add_or_replace_order() wird gerufen.
priority="zahl"
title="text"
Der Titel des Auftrags.
state="text"
web_service="name"
Wenn der Auftrag ausgeführt worden ist (das Ende der Jobkette erreicht hat), wird er mit einem Stylesheet
transformiert und einem Web-Dienst übergeben.
Siehe <web_service> (Seite 73).
at="timestamp" (Initialwert:now) Startzeit des Auftrags
"now", "yyyy-mm-dd HH:MM[:SS]", "now + HH:MM[:SS]" und "now + SECONDS" sind möglich.
Siehe auch Order.at .
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
182
end_state="text" Zustand, vor dessen erfolgreichen Verlassen der Auftrag enden soll
Wie Order.end_state .
XML-Element <check_folders>
<check_folders > </check_folders>
Prüft die Konfigurationsverzeichnisse auf Änderung und aktualisiert die Objekte im JobScheduler. Unter Windows
werden Änderungen in Konfigurationsverzeichnissen sofort erkannt, unter Unix wird dies innerhalb von max. 60s
erkannt.
Das Kommando ist in der HTML-Oberfläche des JobSchedulers verfügbar und wird bspw. eingesetzt, um während
der Entwicklung von Jobs unter Unix die Wartezeit zu verkürzen bis eine Änderung im Konfigurationsverzeichnis
wirkt.
Beispiel:
<check_folders/>
Eltern Elemente
<commands> -
XML-Element <job.why>
<job.why
job
> </job.why>
= "job_name"
Dieses Kommando ermittelt mögliche Ursachen dafür, warum ein Job nicht anläuft. Da diese nicht nur auf den Job
selbst zurück zu führen sind, sondern evtl. auch auf Objekte, die mit dem Job in Zusammenhang stehen
(Jobketten, Aufträge etc.), liefert diese Kommando i.d.R. eine Struktur von XML Elementen, die auf den Job
referenzieren. Allen Elementen ist gemeinsam, dass sie in einem oder mehreren obstacle Elementen münden
müssen, die - jedes für sich - einen Grund angeben, warum der Job nicht anläuft.
Beispiel:
<job.why job="mein_job" />
Eltern Elemente
<commands> Attribute
job="job_name"
Der Jobname.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
183
XML-Element <job_chain.modify>
<job_chain.modify
job_chain
state
> </job_chain.modify>
= "name"
= "state"
Bestimmt die Jobkette
Beispiel:
<job_chain.modify job_chain="my_job_chain" state="stopped"/>
Eltern Elemente
<commands> Attribute
job_chain="name" Bestimmt die Jobkette
state="state"
Für eine verteilte Jobkette nicht möglich.
Mögliche Angaben sind
Einzelne Jobkettenknoten können gestoppt werden mit <job_chain_node.modify action="stop"> .
Meldungen
[ERROR]
SCHEDULER-384
job_chain is distributed and therefore does not support operation '' [ERROR]
SCHEDULER-405
Setting state='' is not possible while job chain has state '' XML-Element <job_chain_node.modify>
<job_chain_node.modify
job_chain
state
action
> </job_chain_node.modify>
= "name"
= "state"
= "action"
Bestimmt die Jobkette
Bestimmt den Jobkettenknoten
Beispiel:
<job_chain_node.modify job_chain="my_job_chain" state="100" action="stop"/>
Eltern Elemente
<commands> Attribute
job_chain="name" Bestimmt die Jobkette
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
184
state="state" Bestimmt den Jobkettenknoten
action="action"
Für eine verteilte Jobkette nicht möglich.
Mögliche Angaben sind action="process", action="stop" und action="next_state", wie bei
Job_chain_node.action beschrieben.
Eine ganze Jobkette kann gestoppt werden mit <job_chain.modify state="stopped"> .
Meldungen
[info]
SCHEDULER-859
Due to action='next_state' the state '' has been skipped. Next state is '' XML-Element <kill_task>
<kill_task
job
id
immediately
> </kill_task>
= "job_name"
= "zahl"
= "yes|no"
Eine Nicht-API-Task ( <process> oder <script language="shell"> ) wird mitsamt ihren Kindprozessen
abgebrochen. Dazu ermittelt der JobScheduler alle Kindprozesse und bricht sie ab. Unter Unix wird außerdem wird
die Prozessgruppe des Task-Prozesses abgebrochen.
Beispiel:
<kill_task job="mein_job" id="4711"/>
Eltern Elemente
<commands> Attribute
job="job_name"
Der Jobname.
id="zahl"
Die Task-Id. (Das Attribut sollte nicht id heißen, das Wort ist in XML reserviert.)
immediately="yes|no" (Initialwert:no)
XML-Element <licence.use>
<licence.use
key
Software- und Organisations-Service GmbH
= "licence_key"
Lizenzschlüssel
August 2014
Kommunikation und Bedienung
185
> </licence.use>
Fügt einen Lizenzschlüssel hinzu.
Eltern Elemente
<commands> Attribute
key="licence_key" Lizenzschlüssel
Der Lizenzschlüssel wird dem Lizenzschlüsselbund hinzugefügt.
Siehe auch sos.ini (Abschnitt [licence], Eintrag key1= …) (Seite 94).
XML-Element <lock>
<lock
name
max_non_exclusive
= "name"
= "integer"
Name der Sperre
Begrenzung der
Belegungen
nicht-exklusiven
> </lock>
Mit einer Sperre kann verhindert werden, dass zwei Tasks gleichzeitig laufen.
Siehe (Seite 152).
Zur Verwendung einer Sperre siehe <lock.use> (Seite 49)
Siehe auch <lock.remove> (Seite 186), Lock .
Beispiel:
<locks>
<lock name="switching_database"/>
<lock name="only_three_tasks" max_non_exclusive="3"/>
</locks>
Verhalten mit <base>
Ergänzt ein Element <lock> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene Attribute
überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<locks> Attribute
name="name" Name der Sperre
Siehe auch Lock.name .
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
186
max_non_exclusive="integer" Begrenzung der nicht-exklusiven Belegungen
Die Voreinstellung ist unbegrenzt, es können also mit <lock.use exclusive="no"> beliebig viele nicht-exklusive
Tasks gestartet werden (aber nur eine exklusive).
Siehe auch Lock.max_non_exclusive .
Meldungen
[warn]
SCHEDULER-887
More lock holders than new max_non_exclusive=: holders XML-Element <lock.remove>
<lock.remove
lock
> </lock.remove>
= "path"
Name der Sperre
Entfernt eine Sperre.
Siehe auch <lock> (Seite 48).
Eltern Elemente
<commands> Attribute
lock="path" Name der Sperre
Die Sperre kann nur gelöscht werden, wenn sie von keiner Task belegt und von keinem Job gebraucht ( <lock.use
> ) wird.
Siehe auch Lock.remove() .
XML-Element <modify_hot_folder>
<modify_hot_folder
folder
>
job
job_chain
lock
order
process_class
schedule
</modify_hot_folder>
= "path"
Deklaration einer Sperre
Prozessklasse
Das Kommando schreibt das Kind-Element in ein Konfigurationsverzeichnis. Der Dateiname wird nach den Regeln
für die dateibasierte Konfiguration gebildet (s. (Seite 78)).
Eine vorhandene Datei wird überschrieben.
Das Kind-Element (nur eins kann angegeben werden) muss das Attribut name= haben, oder bei einem Auftrag
job_chain= und id=.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
187
Eltern Elemente
<commands> Attribute
folder="path" (Initialwert:/)
Gibt den Ordner an, in das das XML-Element geschrieben werden soll. Der JobScheduler legt das
Konfigurationsverzeichnis bei Bedarf an (einschließlich aller oberen Verzeichnisse, bis auf das Wurzelverzeichnis).
XML-Element <modify_job>
<modify_job
job
cmd
> </modify_job>
= "jobname"
= "cmd"
Beispiel:
<modify_job job="mein_job" cmd="wake"/>
Eltern Elemente
<commands> Attribute
job="jobname"
Der Name des Jobs, für den das Kommando gilt.
cmd="cmd"
Folgende Subkommandos sind möglich:
XML-Element <modify_order>
<modify_order
job_chain
order
state
title
action
setback
priority
suspended
at
end_state
= "name"
= "id"
= "state"
= "title"
= "action"
= "no"
= "zahl"
= "yes|no"
= "timestamp"
= "text"
Zustand, vor dessen erfolgreichen Verlassen der
Auftrag enden soll
>
params
xml_payload
Software- und Organisations-Service GmbH
Parameter
XML-Nutzlast
August 2014
Kommunikation und Bedienung
188
run_time
</modify_order>
Beispiel:
<modify_order job_chain="meine_jobkette" order="42" priority="1"/>
Eltern Elemente
<commands> Attribute
job_chain="name"
Die Jobkette, in der sich der Auftrag befindet.
order="id"
Die Kennung des Auftrags (alphanumerisch).
state="state"
Ändert den Zustand des Auftrags und damit die Position in der Jobkette. Eine Rückstellung ( Order.setback() )
wird zurückgenommen.
Siehe auch Order.state
title="title"
Ändert Title des Auftrags
Siehe auch Order.title
action="action"
action="reset" setzt den Auftrag zurück: Der Auftrag wird in seinen ursprünglichen Zustand versetzt, er ist nicht
mehr suspendiert und auch setback ist zurückgenommen. Seine nächste Startzeit wird berechnet, als hätte der
Auftrag die Jobkette vollständig durchlaufen.
Die Operation ist nur möglich, wenn der Auftrag gerade nicht von einem Job ausgeführt wird.
Meldungen
[ERROR]
SCHEDULER-217
order is being processed by task setback="no"
Wirksam, nach der Auftrag mit Order.setback() zurückgestellt worden ist. Das Kommando beendet die mit <
delay_order_after_setback> eingestellte Verzögerung, so dass der Auftrag sofort ausgeführt werden kann. Der
Zähler, wie oft der Auftrag zurückgestellt worden ist, bleibt unverändert.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
189
Siehe auch Order.setback() und <delay_order_after_setback> (Seite 28).
priority="zahl"
suspended="yes|no"
Setzt den Auftrag aus oder setzt ihn fort, siehe Order.suspended .
at="timestamp"
"now", "yyyy-mm-dd HH:MM[:SS]", "now + HH:MM[:SS]" und "now + SECONDS" sind möglich.
Ändert den nächsten Startzeitpunkt eines wartendenen Auftrags,
•
•
dessen Order.run_time noch nicht erreicht ist, oder
der mit Order.setback() zurückgestellt worden ist.
at="now" setzt einen wegen Order.run_time oder Order.setback() wartenden Auftrag fort.
Siehe auch <add_order at="…"> (Seite 14) und Order.at .
end_state="text" Zustand, vor dessen erfolgreichen Verlassen der Auftrag enden soll
Wie Order.end_state .
XML-Element <modify_spooler>
<modify_spooler
cmd
timeout
> </modify_spooler>
= "cmd"
= "int"
Wenn der JobScheduler wegen Plattenplatzmangel für ein Protokoll angehalten hat ( <state waiting_errno="…"
> ), werden die Subkommandos pause, reload, terminate, terminate_and_restart,
let_run_terminate_and_restart nicht sofort ausgeführt. Dagegen wirken continue, abort_immediately und
abort_immediately_and_restart sofort.
Beispiel:
<modify_spooler cmd="abort_immediately_and_restart"/>
Eltern Elemente
<commands> Attribute
cmd="cmd"
Folgende Subkommandos sind möglich:
timeout="int"
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
190
Für cmd="terminate" und cmd="terminate_and_restart": Die Frist, nach der der JobScheduler nicht beendete
Prozesse abbrechen soll.
Voreingestellt ist eine endlose Frist.
Siehe Spooler.terminate() .
XML-Element <param>
<param
name
value
> </param>
= ""
= ""
Eindeutiger Name
Siehe <params> (Seite 54).
Bestimmt einen einzelnen Parameter für den Scheduler, einen Job oder einen Auftrag. Grundsätzlich sind alle
Parameter über die API Aufrufe Spooler.variables() , Task.params() bzw. Order.payload() oder in shell Jobs
als environment Variable (mit vorangestelltem SCHEDULER_PARAM_) verfügbar.
Gleichnamige Parameter in der JobScheduler Konfiguration, am Job und am Auftrag gelten in der folgenden
Reihenfolge:
•
Auftrag
•
Job
•
Scheduler
Es wird empfohlen keine eigenen Parameter einzustellen, die mit der Zeichenfolge scheduler. beginnen, da dieser
Namensraum für Konfigurationseinstellungen des JobScheduler reserviert ist.
Die Parameter können zur Laufzeit überschrieben und erweitert werden.
Siehe auch die Klasse Variable_set .
Scheduler-Parameter
Folgende Scheduler-Parameter könnnen für die Konfiguration des JobScheduler verwendet werden:
scheduler.variable_name SCHE
_prefix
DULE
R_
scheduler.max_kbyte_of
_db_log_entry
Prefix der JobScheduler einvironment Variablen (aus Kompatibilitätsgründen
zu älteren Versionen ist auch SCHEDULER_VARIABLE_NAME_PREFIX
gültig).
unbegr Maximale Größe der Orderlogs in der Datenbank.
enzt
scheduler.order.keep_or TRUE
der_content_on_resched
ule
Behält den Zustand der Auftragsparameter nach dessen Ausführung.
scheduler.order.distribut FALSE TRUE: Verteilte Aufträge werden gleichmässig auf die JobScheduler des
ed.balanced
Clusters verteilt.
FALSE: Verteilte Aufträge werden auf einem JobScheduler des Clusters
ausgeführt, bis dieser ausgelastet ist.
•
•
•
scheduler.variable_name_prefix
scheduler.max_kbyte_of_db_log_entry
scheduler.order.keep_order_content_on_reschedule
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
191
•
scheduler.order.distributed.balanced
Job-Parameter
Job-Parameter können mit der Methode Task.params() abgerufen werden.
Auftrags-Parameter
Parameter eines Auftrags können mit der Methode Order.params() abgerufen werden.
Verhalten mit <base>
Ergänzt ein Element <param> an der entsprechenden Stelle mit gleichem Attribut name= aus der Basiskonfiguration.
Hier angegebene Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<params> - Parameter
Attribute
name="" Eindeutiger Name
value=""
Umgebungsvariablen (z.B. $HOME) werden ersetzt (s. Ersetzung von Umgebungsvariablen (Seite 95)).
XML-Element <param.get>
<param.get
name
> </param.get>
= "name"
Name des Parameters
Liefert <param> mit dem Scheduler-Parameter oder <ok> , wenn er unbekannt ist.
Attribute
name="name" Name des Parameters
XML-Element <params>
<params >
param
copy_params
include
</params>
Ein Parameter
Bestimmt Parameter für den Scheduler, einen Job oder einen Auftrag. Die Parameter können zur Laufzeit
überschrieben und erweitert werden.
Scheduler-Parameter können mit der Methode Spooler.variables() abgerufen werden.
Job-Parameter können mit der Methode Task.params() abgerufen werden.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
192
Parameter eines Auftrags können mit der Methode Order.payload() abgerufen werden.
Siehe auch die Klasse Variable_set und <sos.spooler.variable_set> (Seite 69).
Verhalten mit <base>
Ergänzt ein Element <params> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<job> <add_order> - Auftrag hinzufügen
<config> <modify_order> <payload> - Nutzlast
<queued_task> <web_service> -
XML-Element <params>
<params >
param
copy_params
include
</params>
Ein Parameter
Bestimmt Parameter für den Scheduler, einen Job oder einen Auftrag. Die Parameter können zur Laufzeit
überschrieben und erweitert werden.
Scheduler-Parameter können mit der Methode Spooler.variables() abgerufen werden.
Job-Parameter können mit der Methode Task.params() abgerufen werden.
Parameter eines Auftrags können mit der Methode Order.payload() abgerufen werden.
Siehe auch die Klasse Variable_set und <sos.spooler.variable_set> (Seite 69).
Verhalten mit <base>
Ergänzt ein Element <params> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<job> <add_order> - Auftrag hinzufügen
<config> <modify_order> <payload> - Nutzlast
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
193
<queued_task> <web_service> -
XML-Element <params.get>
<params.get
name
> </params.get>
= "name"
Name des Parameters
Liefert <params> mit allen Scheduler-Variablen.
Attribute
name="name" Name des Parameters
XML-Element <payload>
<payload >
params
</payload>
Parameter
Wenn die Nutzlast kein Variable_set ist, wird sie als Text eingefügt.
Eltern Elemente
<order> -
XML-Element <process_class>
<process_class
spooler_id
name
max_processes
remote_scheduler
replace
> </process_class>
= "scheduler_id"
= "name"
= "zahl"
= "host:port"
Ausführung der Tasks auf entferntem
Rechner
= "yes|no"
Definiert oder ändert eine Prozessklasse.
Siehe auch <process_class.remove> (Seite 195).
Verhalten mit <base>
Ergänzt ein Element <process_class> an der entsprechenden Stelle aus der Basiskonfiguration. Hier angegebene
Attribute überschreiben die aus der Basiskonfiguration.
Eltern Elemente
<process_classes> -
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
194
Attribute
spooler_id="scheduler_id"
Das Element ist nur wirksam, wenn dieses Attribut leer oder gleich dem Parameter -id= vom JobScheduler Start
ist, oder wenn beim JobScheduler Start die Option -id nicht angegeben worden ist.
name="name"
Name der Prozessklasse. Wenn das Attribut fehlt oder leer ("") ist, dann wird die Default-Prozessklasse geändert.
Siehe <job> (Seite 37), Attribut process_class=.
max_processes="zahl" (Initialwert:30)
Begrenzt die Zahl der Prozesse.
Manche Betriebsysteme limitieren die Zahl der Prozesse, die der JobScheduler starten darf. Es sollten nicht mehr
Prozesse konfiguriert werden als das Betriebssystem erlaubt.
Für Microsoft Windows Betriebssysteme gilt derzeit eine Beschränkung von max. 30 für die parallele Ausführung
zugelassenen Prozessen.
remote_scheduler="host:port" Ausführung der Tasks auf entferntem Rechner
Bestimmt den entfernten Scheduler, auf dem die Tasks dieser Prozessklasse ausgeführt werden sollen, durch
Hostnamen oder IP-Nummer und TCP-Port (s. <config tcp_port="…"> ).
Der entfernte JobScheduler muss den Zugriff mit <allowed_host level="all"> erlauben.
Die ausgeführten Tasks kommunizieren über die API mit dem steuernden Scheduler. Dabei gibt es einige
Besonderheiten:
•
•
•
<include> innerhalb von <script> wird vom Task-Prozess ausgeführt. Die einzuschließende Datei wird also
vom Rechner, der die Task ausführt, gelesen.
Subprocess.timeout und Task.add_pid() wirken nicht. Der JobScheduler kann entfernte Subprozesse,
deren Frist abgelaufen ist, nicht abbrechen.
Log.log_file() wird, wie fast alle Methoden, auf dem Rechner des Schedulers ausgeführt, greift also auf
die Dateien des dortigen Dateisystems zu.
Einige Einstellungen werden vom entfernten statt vom eigenen JobScheduler übernommen:
•
•
•
•
•
sos.ini (Abschnitt [java], Eintrag javac= …)
factory.ini (Abschnitt [spooler], Eintrag tmp= …)
<config java_options="…">
<config java_class_path="…">
<config include_path="…">
Meldungen
[warn]
SCHEDULER-849
Timeout is not possible for a subprocess running on a remote host (it cannot be
killed), pid= [warn]
SCHEDULER-850
After lost connection to remote scheduler, process is going to be killed [info]
SCHEDULER-848
Task pid= started for remote scheduler replace="yes|no" (Initialwert:yes)
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
195
replace="yes" ersetzt die vorhandene Prozessklasse.
replace="no" ändert nur die gesetzten Attribute der Prozessklasse.
XML-Element <process_class.remove>
<process_class.remove
process_class
> </process_class.remove>
= "path"
Name der Sperre
Entfernt eine Prozessklasse.
Siehe auch <process_class> (Seite 59).
Eltern Elemente
<commands> Attribute
process_class="path" Name der Sperre
Wenn noch Tasks in der Prozessklasse laufen, verzögert der JobScheduler das Löschen bis die letzte Task
geendet hat. Solange werden keine neuen Tasks gestartet.
Siehe auch Process_class.remove() .
XML-Element <remove_job_chain>
<remove_job_chain
job_chain
> </remove_job_chain>
= "name"
Entfernt eine Jobkette.
Das Kommando nutzt die Methode Job_chain.remove() .
Beispiel:
<remove_job_chain job_chain="my_job_chain" />
Eltern Elemente
<commands> Attribute
job_chain="name"
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
196
XML-Element <remove_order>
<remove_order
job_chain
order
> </remove_order>
= "name"
= "id"
Entfernt einen Auftrag aus einer Jobkette. Ein gerade den Auftrag ausführender Job bleibt unbeinflusst.
Das Kommando nutzt die Methode Order.remove_from_job_chain() .
Beispiel:
<remove_order job_chain="my_job_chain" order="42" />
Eltern Elemente
<commands> Attribute
job_chain="name"
order="id"
Die Kennung des Auftrags (alphanumerisch).
XML-Element <schedule.remove>
<schedule.remove
schedule
> </schedule.remove>
= "path"
Pfad des Schedules
Entfernt ein Schedule.
Siehe auch <schedule> (Seite 65).
Eltern Elemente
<commands> Attribute
schedule="path" Pfad des Schedules
Alle Tasks von Jobs, die den Schedule nutzen, werden beendet.
Aufträge, die den Schedule nutzen, laufen die Jobkette zum Ende durch und werden solange nicht wiederholt, wie
der Schedule fehlt.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
197
XML-Element <scheduler_log.log_categories.reset>
<scheduler_log.log_categories.reset
delay
= "integer"
> </scheduler_log.log_categories.reset>
Verzögerung in Sekunden
Setzt alle Log-Kategorien auf die für den Scheduler-Start eingestellten Werte zurück.
Siehe auch »Log Categories« (Seite 171)
Beispiel:
<scheduler_log.log_categories.reset delay="360"/>
Eltern Elemente
<commands> Attribute
delay="integer" Verzögerung in Sekunden
Verzögert das Zurücksetzen um die angegebene Zeit.
XML-Element <scheduler_log.log_categories.set>
<scheduler_log.log_categories.set
category
= "name"
value
= "0|1"
> </scheduler_log.log_categories.set>
Name der Kategorie
Siehe auch »Log Categories« (Seite 171)
Beispiel:
<scheduler_log.log_categories.set category="scheduler" value="1"/>
Eltern Elemente
<commands> Attribute
category="name" Name der Kategorie
value="0|1"
1 schaltet die Kategorie an, 0 schaltet sie ab.
XML-Element <scheduler_log.log_categories.show>
<scheduler_log.log_categories.show > </scheduler_log.log_categories.show>
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
198
Siehe auch »Log Categories« (Seite 171)
Beispiel:
<scheduler_log.log_categories.show/>
Eltern Elemente
<commands> -
XML-Element <show_calendar>
<show_calendar
what
limit
from
before
> </show_calendar>
= "what"
= "zahl"
= "yyyy-mm-ddThh:mm:ss"
= "yyyy-mm-ddThh:mm:ss"
Das Kommando liefert die Startzeiten der Jobs und Aufträge. Das Ergebnis ist nicht geordnet.
Das Attribut limit="" ist auf limit="100" voreingestellt und begrenzt die Ergebnismenge. Das Limit sollte groß
genug gewählt werden, um nicht einen löchrigen Kalendar zu bekommen.
Beispiel:
<show_calendar/>
<show_calendar limit="1000" what="orders" from="2007-04-03T00:00:00"
before="2007-05-01T00:00:00"/>
Eltern Elemente
<commands> Attribute
what="what"
what="orders" liefert auch die Startzeiten der Aufträge.
limit="zahl" (Initialwert:100)
Begrenzt zum Schutz vor einem zu großen Ergebnis die Anzahl der Kalendereinträge, die zurückgeliefert werden.
Weil die Kalendereinträge nicht nach Zeit, sondern nach Objekten geordnet sind, liefert das Kommando auch nicht
die nächsten 100 Einträge, sondern irgendwelche.
Das Limit sollte also groß genug eingestellt werden, dass kein Eintrag verloren geht.
from="yyyy-mm-ddThh:mm:ss"
Liefert nur Kalendereinträge ab dem Zeitpunkt.
before="yyyy-mm-ddThh:mm:ss"
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
199
Liefert nur Kalendereinträge vor dem Zeitpunkt. Voreinstellung ist eine Woche nach from= oder eine Woche nach
from.
XML-Element <show_history>
<show_history
job
id
next
prev
what
> </show_history>
= "job_name"
= "zahl"
= "zahl"
= "zahl"
= ""
Beispiel:
<show_history id="4711" next="10"/>
Eltern Elemente
<commands> Attribute
job="job_name"
Der Jobname.
id="zahl"
Die Kennung des Historiensatzes. (Das Attribut sollte nicht id heißen, das Wort ist in XML reserviert.)
next="zahl"
Die nächsten zahl Einträge hinter der Task-Id sollen geliefert werden.
prev="zahl"
Die letzten zahl Einträge vor der Task-id sollen geliefert werden.
what=""
XML-Element <show_job>
<show_job
job
job_chain
what
max_orders
max_task_history
> </show_job>
Software- und Organisations-Service GmbH
= "name"
= "name"
= ""
= ""
= ""
August 2014
Kommunikation und Bedienung
200
Beispiel:
<show_job job="my_job"/>
Eltern Elemente
<commands> Attribute
job="name"
Der Jobname.
job_chain="name"
Aufträge, die nicht in dieser Jobkette stehen, und Tasks, die solche Aufträge verarbeiten, werden nicht geliefert.
what=""
max_orders=""
max_task_history=""
XML-Element <show_job_chain>
<show_job_chain
job_chain
max_orders
max_order_history
what
> </show_job_chain>
= ""
= ""
= ""
= ""
Name der Jobkette
Beispiel:
<show_job_chains/>
Zeigt die Jobketten
Eltern Elemente
<commands> Attribute
job_chain="" Name der Jobkette
max_orders=""
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
201
max_order_history=""
what=""
XML-Element <show_job_chains>
<show_job_chains
what
max_orders
max_order_history
> </show_job_chains>
= ""
= ""
= ""
Beispiel:
<show_job_chains/>
Unsichtbare Jobketten ( <job_chain visible="no"> ) werden nicht gezeigt.
Eltern Elemente
<commands> Attribute
what=""
max_orders=""
max_order_history=""
XML-Element <show_jobs>
<show_jobs
what
max_orders
max_task_history
> </show_jobs>
= ""
= ""
= ""
Beispiel:
<show_jobs/>
Unsichtbare Jobs ( <job visible="no"> ) werden nicht gezeigt.
Eltern Elemente
<commands> Attribute
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
202
what=""
max_orders=""
max_task_history=""
XML-Element <show_order>
<show_order
job_chain
order
history_id
what
> </show_order>
= "name"
= "id"
= "integer"
= ""
Zeigt einen aktuellen Auftrag oder einen aus der Historie.
Beispiel:
<show_order job_chain="meine_jobkette" order="E4711"/>
Eltern Elemente
<commands> Attribute
job_chain="name"
Der Name der Jobkette.
order="id"
Die Kennung des Auftrags.
history_id="integer"
Abschlossene Aufträge werden in der Historie der Scheduler-Datenbank gespeichert. Dabei können zur selben
Auftragskennung mehrere Einträge vorliegen, z.B. wenn der Auftrag wegen <run_time> wiederholt ausgeführt
wird. Jeder Historien-Eintrag hat eine Historien-Kennung, über die er diesem Attribut abgerufen werden kann. Das
Attribut order= ist dann nicht erforderlich.
Die Historien-Kennung wird von <show_job_chain what="order_history"> geliefert.
what=""
XML-Element <show_state>
<show_state
what
Software- und Organisations-Service GmbH
= "what"
August 2014
Kommunikation und Bedienung
max_orders
max_order_history
max_task_history
> </show_state>
203
= "integer"
= "integer"
= "integer"
Der Elementname show_state kann zu s abgekürzt werden.
Beispiel:
<show_state/>
<show_state what="job_chain_orders,job_orders"/>
Eltern Elemente
<commands> Attribute
what="what"
(Diese Beschreibung ist für alle Kommandos dieselbe; manche Schlüsselwörter sind nur für bestimmte
Kommandos sinnvoll.)
Damit die Antwort eines Kommandos nicht unnötig groß wird, filtert der JobScheduler sie. Mit einer Kombination
folgender Schlüsselwörter (durch Komma getrennt) können Sie die Antwort erweitern.
max_orders="integer"
Begrenzt die Anzahl der Aufträge, die zurückgeliefert werden.
max_order_history="integer" (Initialwert:0)
Begrenzt die Anzahl der Aufträge aus der Auftragshistorie. max_order_history="0" unterdrückt die
Auftragshistorie.
max_task_history="integer" (Initialwert:20)
Begrenzt die Anzahl der Einträge in <history> .
XML-Element <show_task>
<show_task
id
what
> </show_task>
= "zahl"
= ""
Zeigt Informationen einer laufenden Task oder eine Task aus der Historie.
Beispiel:
<show_task id="4711"/>
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
204
Eltern Elemente
<commands> Attribute
id="zahl"
Die Task-Id.
what=""
XML-Element <start_job>
<start_job
job
name
after
at
force
web_service
= "job_name"
= "name"
= "zahl"
= "yyyy-mm-dd hh:mm:ss | now |
period"
= "yes|no"
= "name"
>
params
</start_job>
Parameter
Beispiel:
<start_job job="mein_job" at="now">
<params>
<param name="anzahl" value="100"/>
</params>
</start_job>
Eltern Elemente
<commands> Attribute
job="job_name"
Der Jobname.
name="name"
Hier kann der Task ein Name gegeben werden.
after="zahl"
Eine Anzahl Sekunden, nach deren Ablauf erst die Task gestartet werden soll.
at="yyyy-mm-dd hh:mm:ss | now | period" (Initialwert:now)
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
205
Zeitpunkt, zu dem die Task gestartet werden soll. Die Voreinstellung force="yes" setzt <run_time> ist außer
Kraft.
Relative Zeitangaben "now", "now + HH:MM[:SS]" und "now + SECONDS" sind möglich.
at="period" lässt den Job erst Starten, wenn die <run_time> dies zulässt (also in der laufenden oder der
nächsten Periode).
force="yes|no" (Initialwert:yes)
force="no":
•
•
•
Wenn der Job gestoppt ist, bleibt er gestoppt.
Wenn mit at= eine Startzeit angegeben ist, zu dem Zeitpunkt <run_time> oder <schedule> keine Start
zulassen, dann verschiebt der JobScheduler den Start bis zur nächsten Periode.
Daraus ergibt sich, dass at="now" wie at="period" wirkt.
force="yes":
•
•
Der Job wird sofort entstoppt (falls er gestoppt ist)
Eine mit at= angegebene Startzeit nimmt keine Rücksicht auf <run_time> oder <schedule> , die Task wird
also auch zu dem Zeitpunkt gestartet, wenn keine Periode vorliegt.
web_service="name"
Wenn die Task ausgeführt worden ist, wird sie mit einem Stylesheet transformiert und einem Web-Dienst
übergeben.
Siehe <web_service> (Seite 73).
XML-Element <terminate>
<terminate
all_schedulers
restart
continue_exclusive_operat
ion
timeout
> </terminate>
= "yes|no"
= "yes|no"
= "yes|no"
= "seconds"
Beendet den JobScheduler ordentlich (s. Beendigung des Schedulers (Seite 225)).
Beispiel:
<terminate/>
Eltern Elemente
<commands> Attribute
all_schedulers="yes|no" (Initialwert:no)
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
206
In Zusammenhang mit -exclusive werden alle beteiligten JobScheduler beendet.
restart="yes|no" (Initialwert:no)
Lässt den JobScheduler erneut starten.
continue_exclusive_operation="yes|no" (Initialwert:no)
In Zusammenhang mit -exclusive wird eingestellt, dass ein inaktiver JobScheduler den Betrieb übernimmt.
timeout="seconds"
Wenn angegeben, bricht der JobScheduler nach der angegeben Frist alle Tasks ab, die bis dahin nicht beendet
haben.
XML-Element <xml_payload>
<xml_payload > </xml_payload>
<xml_payload> enthält genau ein XML-Element (mit beliebig vielen Kind-Elementen). Die Eigenschaft
Order.xml_payload enthält dieses Element als XML-Text.
Eltern Elemente
<order> <add_order> - Auftrag hinzufügen
<modify_order> -
5.2.1 XML-Antworten
XML-Elemente
XML-Element <answer>
<answer
time
>
ERROR
history
job
job_chain
order
process_classes
ok
log_categories
state
task
</answer>
= "yyyy-mm-dd hh:mm:ss.mmm"
Fehlermeldung
Task-Historie
Job
Jobkette
Auftrag
Prozessklassen
Einfache Antwort
Log-Kategorien
Allgemeiner Zustand des Schedulers
Task
Der JobScheduler liefert nur eins der Kind-Elemente.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
207
Eltern Elemente
<spooler> Attribute
time="yyyy-mm-dd hh:mm:ss.mmm"
Zeitstempel der Antwort.
XML-Element <ERROR>
<ERROR
time
class
code
text
source
line
col
> </ERROR>
= "yyyy-mm-dd hh:mm:ss"
= "name"
= "text"
= "text"
= "filename"
= "zahl"
= "zahl"
Zeitstempel
Name der Exception-Klasse (C++)
Fehlercode
Fehlercode und Fehlertext
Name der Datei, die den Fehler
enthält
Zeilennummer
Spaltennummer
Eltern Elemente
<answer> - Antwort
<job> - Job
<task> - Task
Attribute
time="yyyy-mm-dd hh:mm:ss" Zeitstempel
class="name" Name der Exception-Klasse (C++)
code="text" Fehlercode
text="text" Fehlercode und Fehlertext
source="filename" Name der Datei, die den Fehler enthält
Wenn der Fehler einer Datei zugeordnet werden konnte.
line="zahl" Zeilennummer
Nummer der Zeile (ab 1), die den Fehler enthält, wenn der Fehler einer Zeile zugeordnet werden konnte.
col="zahl" Spaltennummer
Nummer der Spalte (ab 1), die den Fehler enthält, wenn der Fehler einer Spalte zugeordnet werden konnte.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
208
XML-Element <file_based>
<file_based
filename
last_write_time
state
>
ERROR
removed
</file_based>
= ""
= ""
= ""
Dateiname
Zeitstempel der Datei in UTC
Fehlermeldung
Noch nicht abgeschlossenes Löschen eines Objekts
Eltern Elemente
<process_class> <lock> <job> - Job
<job_chain> - Jobkette
<order> - Auftrag
Attribute
filename="" Dateiname
last_write_time="" Zeitstempel der Datei in UTC
state=""
Eine der Angaben undefined, not_initialized, initialized, loaded, active und closed.
XML-Element <history>
<history >
history.entry
</history>
Eintrag in der Task-Historie
Die Histore wird aus der Datenbank gelesen.
Eltern Elemente
<history> - Task-Historie
XML-Element <history.entry>
<history.entry
task
id
spooler_id
job_name
start_time
end_time
Software- und Organisations-Service GmbH
= "zahl"
= "zahl"
= "name"
= "name"
= "yyyy-mm-dd hh:mm:ss"
= "yyyy-mm-dd hh:mm:ss"
Task-Id
Task-Id (veraltet)
Scheduler-Id
Jobname
Zeitpunkt des Starts der Task
Zeitpunkt des Endes der Task
August 2014
Kommunikation und Bedienung
cause
steps
error
error_code
error_text
209
= "cause"
= "zahl"
= "0|1"
= "text"
= "text"
Grund des Starts
Zahl der Jobschritte
"1" bei einem Jobfehler
Fehlercode
Fehlercode mit Fehlertext
>
ERROR
</history.entry>
Fehlermeldung
Die Histore wird aus der Datenbank gelesen.
Eltern Elemente
<history> - Task-Historie
Attribute
task="zahl" Task-Id
id="zahl" Task-Id (veraltet)
Verwenden sie das Attribut task=.
spooler_id="name" Scheduler-Id
Kennung des Schedulers oder "-", wenn der JobScheduler keine Kennung hat.
job_name="name" Jobname
start_time="yyyy-mm-dd hh:mm:ss" Zeitpunkt des Starts der Task
end_time="yyyy-mm-dd hh:mm:ss" Zeitpunkt des Endes der Task
cause="cause" Grund des Starts
Siehe <task cause="…"> (Seite 222)
steps="zahl" Zahl der Jobschritte
error="0|1" "1" bei einem Jobfehler
error_code="text" Fehlercode
Innerhalb von <job> wird anstelle dieses Attributs das Element <ERROR> ausgegeben.
error_text="text" Fehlercode mit Fehlertext
Innerhalb von <job> wird anstelle dieses Attributs das Element <ERROR> ausgegeben.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
210
XML-Element <job>
<job
job
state
waiting_for_process
all_steps
all_tasks
state_text
log_file
order
tasks
next_start_time
delay_after_error
in_period
has_description
remove
temporary
enabled
= "name"
= "state"
= "yes|no"
Jobname
Zustand
Wenn der Job auf einen Prozess
wartet
= "zahl"
Zahl der Jobschritte aller Tasks
= "zahl"
Zahl aller bisher gestarteten
Tasks
= "text"
Eigenschaft Job.state_text
= "dateiname"
Dateiname des Protokolls
= "yes|no"
Bei auftragsgesteuertem Job
= "zahl"
Anzahl der zugelassenen Tasks
= "yyyy-mm-dd hh:mm:ss.mmm" Voraussichtliche nächste Startzeit
= "yyyy-mm-dd hh:mm:ss.mmm" delay_after_error ist nach einem
Fehler wirksam
= "yes|no"
Wenn gerade eine <period>
wirksam ist
= "yes"
yes, wenn der Job eine <
description> hat
= "yes"
yes, wenn der Job entfernt wird
= "yes"
yes, wenn der Job temporär ist
= "yes|no"
Deaktiviert einen Job.
>
file_based
tasks
description
commands
params
lock.requestor
queued_tasks
history
order_queue
ERROR
</job>
Dem Objekt zugrundliegende Datei
Liste der laufenden Tasks
Tasks in der Warteschlange
Task-Historie
Auftragswarteschlange
Fehlermeldung
Eltern Elemente
<jobs> <answer> - Antwort
Attribute
job="name" Jobname
state="state" Zustand
state="none"
Der anfängliche Status des Jobs beim Start des Schedulers.
state="stopping"
Wenn der Job gestoppt wird und noch nicht alle Tasks beendet sind.
state="stopped"
Der Job ist gestoppt und alle Tasks sind beendet.
state="read_error"
Wenn <script> nicht gelesen werden konnte.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
211
state="pending"
Keine Task läuft.
state="running"
Wenigstens eine Task läuft.
waiting_for_process="yes|no" (Initialwert:no) Wenn der Job auf einen Prozess wartet
Das ist der Fall, wenn der Job eine Task starten will, aber die Prozessklasse nicht genügend groß ist.
Siehe <job process_class="…"> (Seite 37).
all_steps="zahl" Zahl der Jobschritte aller Tasks
all_tasks="zahl" Zahl aller bisher gestarteten Tasks
state_text="text" Eigenschaft Job.state_text
Siehe Job.state_text .
log_file="dateiname" Dateiname des Protokolls
order="yes|no" (Initialwert:no) Bei auftragsgesteuertem Job
Siehe <job order="…"> (Seite 37).
tasks="zahl" Anzahl der zugelassenen Tasks
Siehe <job tasks="…"> (Seite 37).
next_start_time="yyyy-mm-dd hh:mm:ss.mmm" Voraussichtliche nächste Startzeit
delay_after_error="yyyy-mm-dd hh:mm:ss.mmm" delay_after_error ist nach einem Fehler wirksam
in_period="yes|no" Wenn gerade eine <period> wirksam ist
has_description="yes" yes, wenn der Job eine <description> hat
remove="yes" yes, wenn der Job entfernt wird
Siehe <modify_job cmd="remove"> (Seite 187).
temporary="yes" yes, wenn der Job temporär ist
Siehe <job temporary="yes"> (Seite 37).
enabled="yes|no" (Initialwert:yes) Deaktiviert einen Job.
Siehe <job enabled="yes"> (Seite 37).
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
212
XML-Element <job_chain>
<job_chain
name
orders
state
>
file_based
job_chain_node
</job_chain>
= "name"
= "zahl"
= "Zustand der Jobkette"
Name der Jobkette
Anzahl der Aufträge in der Jobkette
Dem Objekt zugrundliegende Datei
Stelle in einer Jobkette
Eltern Elemente
<job_chains> Attribute
name="name" Name der Jobkette
orders="zahl" Anzahl der Aufträge in der Jobkette
state="Zustand der Jobkette"
state="under_constructio
n"
Der anfängliche Status nach Spooler.create_job_chain() .
state="finished"
Nach Spooler.add_job_chain() .
state="removing"
Nach Job_chain.remove() , solange noch Aufträge ausgeführt werden.
XML-Element <job_chain_node>
<job_chain_node
state
= "text"
next_state
error_state
orders
= "text"
= "text"
= "zahl"
Auftragszustand, dem diese Stelle zugeordnet
ist
Folgezustand
Zustand für den Fehlerfall
Anzahl der Aufträge an dieser Stelle
>
job
</job_chain_node>
Job
Eltern Elemente
<job_chain> - Jobkette
Attribute
state="text" Auftragszustand, dem diese Stelle zugeordnet ist
next_state="text" Folgezustand
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
213
error_state="text" Zustand für den Fehlerfall
orders="zahl" Anzahl der Aufträge an dieser Stelle
XML-Element <log>
<log
level
highest_level
last_error
last_warning
mail_on_error
mail_on_warning
mail_on_success
mail_on_process
smtp
mail_from
mail_to
mail_cc
mail_bcc
mail_subject
> </log>
= "log_level"
= "log_level"
= "string"
= "string"
= "boolean"
= "boolean"
= "boolean"
= "integer"
= "name"
= "email_adresse"
= "email_adresse"
= "email_adresse"
= "email_adresse"
= "email_subject"
Mindest-Level, ab dem Ausgaben
durchgelassen werden
Das höchste bisher benutzte Level
Letzter Ausgabe des Levels error
Letzter Ausgabe des Levels warn
Der Inhalt von <log> ist das Protokoll (wenn mit what="log" bestellt).
Eltern Elemente
<job> - Job
<task> - Task
Attribute
level="log_level" Mindest-Level, ab dem Ausgaben durchgelassen werden
Siehe
highest_level="log_level" Das höchste bisher benutzte Level
last_error="string" Letzter Ausgabe des Levels error
last_warning="string" Letzter Ausgabe des Levels warn
mail_on_error="boolean"
Siehe factory.ini (Abschnitt [spooler], Eintrag mail_on_error= …) (Seite 91)
mail_on_warning="boolean"
Siehe factory.ini (Abschnitt [spooler], Eintrag mail_on_warning= …) (Seite 91)
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
214
mail_on_success="boolean"
Siehe factory.ini (Abschnitt [spooler], Eintrag mail_on_success= …) (Seite 91)
mail_on_process="integer"
Siehe factory.ini (Abschnitt [spooler], Eintrag mail_on_process= …) (Seite 91)
smtp="name"
Siehe factory.ini (Abschnitt [spooler], Eintrag smtp= …) (Seite 93)
mail_from="email_adresse"
Siehe factory.ini (Abschnitt [spooler], Eintrag log_mail_from= …) (Seite 91)
mail_to="email_adresse"
Siehe factory.ini (Abschnitt [spooler], Eintrag log_mail_to= …) (Seite 91)
mail_cc="email_adresse"
Siehe factory.ini (Abschnitt [spooler], Eintrag log_mail_cc= …) (Seite 91)
mail_bcc="email_adresse"
Siehe factory.ini (Abschnitt [spooler], Eintrag log_mail_bcc= …) (Seite 91)
mail_subject="email_subject"
Siehe factory.ini (Abschnitt [spooler], Eintrag log_mail_subject= …) (Seite 91)
XML-Element <log_categories>
<log_categories >
log_category
</log_categories>
Siehe auch »Log Categories« (Seite 171)
Eltern Elemente
<answer> - Antwort
XML-Element <ok>
<ok > </ok>
Ein leeres Element, mit dem Kommandos antworten, die kein weiteres Ergebnis liefern.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
215
Eltern Elemente
<answer> - Antwort
XML-Element <order>
<order
order
title
state
job_chain
job
task
= "id"
= "text"
= "text"
= "name"
= "name"
= "id"
Auftragskennung
Titel
Zustand
Name der Jobkette
Job
Kennung der Task, die den Auftrag
gerade ausführt
=
" y y y y - m m - d dSeit wann die Task den Auftrag
hh:mm:ss.mmm"
ausführt
= "text"
Zustandstext
= "zahl"
Priorität
=
" y y y y - m m - d dWann der Auftrag erzeugt worden
hh:mm:ss.mmm"
ist
= "dateiname"
Name der Protokolldatei
= "hh:mm:ss.mmm"
Wann der Auftrag zurückgestellt
worden ist
=
" y y y y - m m - d dNächster Startzeitpunkt
hh:mm:ss.mmm"
= "yes|no"
Auftrag ist aus der Jobkette entfernt
worden
= "yes|no"
Auftrag ist ersetzt worden
= "yes|no"
Auftrag ersetzt einen anderen
gerade ausgeführten
= "name"
Name
des
zugeordneten
Web-Dienstes
in_process_since
state_text
priority
created
log_file
setback
next_start_time
removed
replaced
replacement
web_service
>
file_based
log
run_time
payload
</order>
Dem Objekt zugrundliegende Datei
Protokoll
Eltern Elemente
<answer> - Antwort
<order_queue> - Auftragswarteschlange
<task> - Task
Attribute
order="id" Auftragskennung
Siehe Order.id
title="text" Titel
Siehe Order.title
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
216
state="text" Zustand
Siehe Order.state
job_chain="name" Name der Jobkette
Siehe Job_chain.add_order()
job="name" Job
Siehe Order.job
task="id" Kennung der Task, die den Auftrag gerade ausführt
in_process_since="yyyy-mm-dd hh:mm:ss.mmm" Seit wann die Task den Auftrag ausführt
state_text="text" Zustandstext
Siehe Order.state_text .
priority="zahl" Priorität
Siehe Order.priority .
created="yyyy-mm-dd hh:mm:ss.mmm" Wann der Auftrag erzeugt worden ist
log_file="dateiname" Name der Protokolldatei
setback="hh:mm:ss.mmm" Wann der Auftrag zurückgestellt worden ist
next_start_time="yyyy-mm-dd hh:mm:ss.mmm" Nächster Startzeitpunkt
Wenn das Attribut fehlt, wird der Auftrag so bald wie möglich ausgeführt.
removed="yes|no" (Initialwert:no) Auftrag ist aus der Jobkette entfernt worden
removed="yes": Der Auftrag ist durch einen Aufruf von Order.remove_from_job_chain() aus der Jobkette
entfernt worden, aber wird noch von einer Task ausgeführt (Elternelement ist <task> ).
replaced="yes|no" (Initialwert:no) Auftrag ist ersetzt worden
replaced="yes": Der Auftrag ist durch einen Aufruf von Job_chain.add_or_replace_order() ersetzt worden,
aber wird noch von einer Task ausgeführt (Elternelement ist <task> ).
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
217
replacement="yes|no" (Initialwert:no) Auftrag ersetzt einen anderen gerade ausgeführten
replacement="yes": Nach Job_chain.add_or_replace_order() wird noch der ersetzte Auftrag von einer Task
ausgeführt.
Dieser Auftrag wird erst ausgeführt, wenn der ersetzte Auftrag ausgeführt worden ist.
web_service="name" Name des zugeordneten Web-Dienstes
XML-Element <order_queue>
<order_queue
length
= "zahl"
next_start_time
= "date"
Anzahl
der Aufträge
Auftragswarteschlange
Startzeit des nächsten Auftrags
in
der
>
order
</order_queue>
Auftrag
Eltern Elemente
<job> - Job
Attribute
length="zahl" Anzahl der Aufträge in der Auftragswarteschlange
Die Anzahl der <order>-Elemente kann geringer oder null sein, wenn sie mit den Attributen max_orders= oder
what="" begrenzt worden ist.
next_start_time="date" Startzeit des nächsten Auftrags
XML-Element <process_classes>
<process_classes >
process_class
</process_classes>
Eltern Elemente
<answer> - Antwort
XML-Element <processes>
<processes >
process
</processes>
Eltern Elemente
<process_class> -
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
218
XML-Element <queued_task>
<queued_task
task
enqueued
start_at
name
= "zahl"
Task-Id
=
" y y y y - m m - d dZeitpunkt der Aufnahme in die
hh:mm:ss.mmm"
Warteschlange
=
" y y y y - m m - d dWann die Task starten soll
hh:mm:ss.mmm"
= "text"
Name der Task
>
params
</queued_task>
Eltern Elemente
<queued_task> - Task in der Warteschlange
Attribute
task="zahl" Task-Id
enqueued="yyyy-mm-dd hh:mm:ss.mmm" Zeitpunkt der Aufnahme in die Warteschlange
start_at="yyyy-mm-dd hh:mm:ss.mmm" Wann die Task starten soll
name="text" Name der Task
XML-Element <queued_tasks>
<queued_tasks
length
>
queued_task
</queued_tasks>
= "zahl"
Anzahl der Tasks in der Warteschlange
Task in der Warteschlange
Eltern Elemente
<job> - Job
Attribute
length="zahl" Anzahl der Tasks in der Warteschlange
XML-Element <removed>
<removed >
ERROR
</removed>
Software- und Organisations-Service GmbH
Fehlermeldung
August 2014
Kommunikation und Bedienung
219
Eltern Elemente
<file_based> - Dem Objekt zugrundliegende Datei
XML-Element <replacement>
<replacement >
process_class
lock
job
job_chain
order
</replacement>
Job
Jobkette
Auftrag
Das Kind-Element hat denselben Namen wie das Eltern-Element. Bei einem Job zum Beispiel ist die
Verschachtelung <job> <replacement> <job> . Das Kind-Element enthält das neue Objekt, das vorhandene noch
nicht ersetzen kann. Sobald das zu ersetzende Objekt bereit ist, nimmt der JobScheduler die Ersetzung vor.
Eltern Elemente
<process_class> <lock> <job> - Job
<job_chain> - Jobkette
<order> - Auftrag
XML-Element <state>
<state
config_file
spooler_id
id
spooler_running_since
wait_until
state
log_file
version
pid
db
db_waiting
waiting_errno
waiting_errno_text
waiting_errno_filename
loop
waits
time
tcp_port
Software- und Organisations-Service GmbH
= "filename"
= "name"
= "name"
= "yyyy-mm-dd hh:mm:ss"
XML-Konfiguration
Scheduler-Id
Veraltet
Zeitpunkt des Anlaufs des
Schedulers
= "yyyy-mm-dd hh:mm:ss|never" Nächste Aktion des Schedulers
= "state"
Zustand des Schedulers
= "dateiname"
Dateiname des Hauptprotokolls
= "vv.vv.vv yyyy-mm-dd"
= "zahl"
Prozess-Id des Schedulers
= "hostware_dateiname"
Datenbank
= "yes|no"
Scheduler
erneuert
Datenbankverbindung
= "number"
Fehler beim Scheiben eines
Protokolls (Platte voll)
= "text"
Fehlertext
zum
Attribut
waiting_errno
= "filename"
Name der Datei, bei der der
Fehler aufgetreten ist
= "zahl"
Interner Wert: Anzahl der
Server-Zyklen
= "zahl"
Interner Wert: Anzahl der
Wartezustände
= "yyyy-mm-dd hh:mm:ss"
veraltet
= "integer"
August 2014
Kommunikation und Bedienung
220
udp_port
= "integer"
>
locks
jobs
job_chains
process_classes
subprocesses
remote_schedulers
</state>
Prozessklassen
Subprozesse (abhängige Prozesse)
Eltern Elemente
<answer> - Antwort
Attribute
config_file="filename" XML-Konfiguration
Name der XML-Konfigurationsdatei.
spooler_id="name" Scheduler-Id
Die Scheduler-Id, siehe Option -id .
id="name" Veraltet
Veraltet. Verwenden sie das Attribut spooler_id=.
spooler_running_since="yyyy-mm-dd hh:mm:ss" Zeitpunkt des Anlaufs des Schedulers
wait_until="yyyy-mm-dd hh:mm:ss|never" Nächste Aktion des Schedulers
state="state" Zustand des Schedulers
Der Zustand des Schedulers kann mit dem Kommando <modify_spooler cmd="…"> beeinflusst werden.
log_file="dateiname" Dateiname des Hauptprotokolls
version="vv.vv.vv yyyy-mm-dd"
Version des Schedulers
pid="zahl" Prozess-Id des Schedulers
db="hostware_dateiname" Datenbank
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
221
Verwendete Datenbank als Hostware-Dateiname. Ein mit -password= angegebene Kennwort wird unterdrückt,
außer der Lizenzschlüssel-Code 15 ist gesetzt (siehe sos.ini (Abschnitt [licence], Eintrag key1= …) und <
licence.use> ).
db_waiting="yes|no" (Initialwert:no) Scheduler erneuert Datenbankverbindung
Wenn der JobScheduler die Datenbankverbindung verloren hat und versucht, sie wiederherzustellen, ist
db_waiting="yes" gesetzt. Der JobScheduler führt währenddessen keinen Job aus.
waiting_errno="number" Fehler beim Scheiben eines Protokolls (Platte voll)
Wenn dieses Attribut gesetzt ist, steht der Scheduduler still und reagiert nur noch auf Kommandos über TCP, UDP
und HTTP.
Der JobScheduler kann mit <modify_spooler cmd="continue"> fortgesetzt werden.
waiting_errno_text="text" Fehlertext zum Attribut waiting_errno
waiting_errno_filename="filename" Name der Datei, bei der der Fehler aufgetreten ist
loop="zahl" Interner Wert: Anzahl der Server-Zyklen
Der Wert erhöht sich, wenn der JobScheduler Opertionen ausführt, z.B. ein Jobschritt oder ein Methodenaufruf aus
einem Job heraus.
waits="zahl" Interner Wert: Anzahl der Wartezustände
Der Wert erhöht sich um eins, wenn der JobScheduler im Wartezustand ist, weil gerade nichts zu tun ist.
time="yyyy-mm-dd hh:mm:ss" veraltet
Veraltet. Verwenden sie <answer time="…">
tcp_port="integer"
udp_port="integer"
XML-Element <subprocess>
<subprocess
pid
priority
timeout_at
killed
= "zahl"
Prozess-Id vom Betriebssystems
= "priority"
= "yyyy-mm-dd hh:mm:ss.mmm" Frist des Prozesses
= "yes|no"
W e n n d i e Ta s k g e r a d e
abgebrochen wird
> </subprocess>
Eltern Elemente
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
222
<subprocesses> - Subprozesse (abhängige Prozesse)
Attribute
pid="zahl" Prozess-Id vom Betriebssystems
priority="priority"
Priorität des Prozesses: Unter Unix -20 bis 20, unter Windows idle, below_normal, normal, above_normal oder
high.
timeout_at="yyyy-mm-dd hh:mm:ss.mmm" Frist des Prozesses
Wenn der Prozess mit Task.add_pid() eine Frist bekommen hat.
killed="yes|no" (Initialwert:no) Wenn die Task gerade abgebrochen wird
XML-Element <subprocesses>
<subprocesses >
subprocess
</subprocesses>
Subprozess (abhängiger Prozess)
Eltern Elemente
<state> - Allgemeiner Zustand des Schedulers
<task> - Task
XML-Element <task>
<task
task
id
state
name
running_since
enqueued
start_at
idle_since
in_process_since
cause
steps
log_file
calling
pid
priority
delayed_after_error_task
web_service
= "zahl"
= "zahl"
= "state"
= "name"
= "yyyy-mm-td hh:mm:ss.mmm"
= "yyyy-mm-td hh:mm:ss.mmm"
= "yyyy-mm-td hh:mm:ss.mmm"
= "yyyy-mm-td hh:mm:ss.mmm"
= "yyyy-mm-td hh:mm:ss.mmm"
= "cause"
= "zahl"
= "dateiname"
= "text"
= "zahl"
= "priority"
= "zahl"
= "name"
Task-Id
(veraltet)
Zustand der Task
Name des zugeordneten
Web-Dienstes
>
subprocesses
Software- und Organisations-Service GmbH
Subprozesse (abhängige Prozesse)
August 2014
Kommunikation und Bedienung
log
order
ERROR
</task>
223
Protokoll
Auftrag
Fehlermeldung
Eltern Elemente
<tasks> - Liste der laufenden Tasks
Attribute
task="zahl" Task-Id
id="zahl" (veraltet)
Die Task-Id.
(XML reserviert das Attribut id, es sollte stattdessen task verwendet werden.)
state="state" Zustand der Task
Folgende Werte werden zurückgegeben:
name="name"
Der Name der Task (s. <start_job> ).
running_since="yyyy-mm-td hh:mm:ss.mmm"
Wenn die Task geladen oder gestartet worden ist: Zeitpunkt des Starts der Task.
enqueued="yyyy-mm-td hh:mm:ss.mmm"
Zeitpunkt, wann die Task in die Task-Warteschlange eingereiht worden ist.
start_at="yyyy-mm-td hh:mm:ss.mmm"
Zeitpunkt, wann die Task gestartet werden soll (s. <start_job at="…"> ).
idle_since="yyyy-mm-td hh:mm:ss.mmm"
Zeitpunkt, seit dem die Task im Zustand waiting_for_order ist.
in_process_since="yyyy-mm-td hh:mm:ss.mmm"
Zeitpunkt, seit dem spooler_process(), also der gerade aktive Jobschritt ausgeführt wird.
cause="cause"
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
224
Anlass des Starts.
steps="zahl"
Anzahl abgeschlossener Jobschritte, also Aufrufe von spooler_process() .
log_file="dateiname"
Name der Protokolldatei. Das Attribut ist nur gesetzt solange die Task läuft.
calling="text"
Name der Methode des Jobs, die gerade aufgerufen wird.
pid="zahl"
Kennung des Prozesses, der die Task ausführt.
priority="priority"
Priorität des Prozesses: Unter Unix -20 bis 20, unter Windows idle, below_normal, normal, above_normal oder
high.
delayed_after_error_task="zahl"
Wenn diese Task eine Wiederholung einer mit Fehler abgebrochen Task ist (s. Job.delay_after_error ), dann
gibt dieses Attribut die Kennung der fehlerhaften Task an.
web_service="name" Name des zugeordneten Web-Dienstes
XML-Element <tasks>
<tasks
count
>
task
</tasks>
= "zahl"
Task
Eltern Elemente
<job> - Job
Attribute
count="zahl"
Anzahl der laufenden Tasks.
Software- und Organisations-Service GmbH
August 2014
Kommunikation und Bedienung
225
XML-Element <waiting_jobs>
<waiting_jobs
job
>
job
</waiting_jobs>
= "name"
Job
Eltern Elemente
<process_class> Attribute
job="name"
5.3 Beendigung des Schedulers
5.3.1 Ordentliches Beenden
Der JobScheduler beendet sich erst, wenn kein Job mehr läuft.
Siehe Spooler.terminate() und <modify_spooler cmd="terminate"> (Seite 189).
5.3.2 Ordentliches Beenden mit Frist
Sie können zum Beenden eine Frist angeben. Wenn nach Ablauf der First noch Tasks laufen, weil sie in z.B.
spooler_process() zu lange verharren, bricht der JobScheduler alle noch laufenden Prozesse ab.
Zuvor verschickt er eine eMail mit dem Hinweis auf Tasks, die abgebrochen werden.
Er wartet dann längstens 30s aufs Ende der Tasks (normalerweise gelingt der Abbruch sofort) und beendet sich
dann.
Siehe Spooler.terminate() und <modify_spooler cmd="terminate"> (Seite 189).
5.3.3 Abbruch
Der JobScheduler bricht allen Prozesse (einschließlich der mit add_pid() registrierten fremden Prozesse) sofort ab
(Unix: kill -s KILL, Windows: TerminateProcess()). Dann bricht er sich selbst ab.
Vorteil: Der Abbruch wirkt sofort.
Nachteil: Sie Software, insbesondere die Jobs können nicht darauf reagieren. Z.B. können temporäre Dateien nicht
gelöscht werden.
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
226
Anhang A: Meldungen des Schedulers
A.1 Messages für Paket Scheduler
Code
Text
SCHEDU
LER-10
4
Beginnzeit (1) liegt nach der Endezeit (2), oder anderer Fehler bei Attributen begin= und end=
- Beispiel für eine nähere Beschreibung Fehlerhaft ist zum Beispiel <period begin="23:00" end="01:00"/>. Eine Periode muss innerhalb
eines Kalendertages liegen, zwischen 00:00 und 24:00.
Siehe <period> (Seite 55).
SCHEDU
LER-10
5
Unbekanntes Kommando: <(1)>
SCHEDU
LER-10
6
Unbekanntes Kommando an eine Task: (1)
SCHEDU
LER-10
7
Skript fehlt
SCHEDU
LER-11
0
Unbekannter Zustand einer Task: (1)
SCHEDU
LER-11
3
XML-Tag (1) ist hier falsch
SCHEDU
LER-11
5
Die XML-Konfigurationsdatei ist nicht angegeben. Option -config=DATEINAME.XML
SCHEDU
LER-11
6
XML-Konfiguration enthält kein Element <config spooler_id=(1)>
SCHEDU
LER-11
7
Verschiedene Skriptsprachen können nicht in derselben Scripting Engine verwendet werden
SCHEDU
LER-11
9
Security level "(1)" gibt es nicht
SCHEDU
LER-12
0
Skript meldet Fehler: (1)
SCHEDU
LER-12
1
Die Sicherheitseinstellungen lassen die Operation nicht zu
SCHEDU
LER-12
2
Task ist beendet
Siehe XML-Kommandos (Seite 179).
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
227
Code
Text
SCHEDU
LER-12
5
task.wait_until_terminated() kann nicht im selben Thread verwendet werden. Deadlock.
SCHEDU
LER-13
0
Job (1) ist bereits definiert
SCHEDU
LER-13
6
Keine Historie
SCHEDU
LER-13
9
Operation bei Historie in Textdatei nicht möglich
SCHEDU
LER-14
0
Task hat Fehler protokolliert: (1)
SCHEDU
LER-14
1
Die Historie für Job (1) ist ausgeschaltet (history=no)
SCHEDU
LER-14
2
Relativer Datenbankdateiname kann bei need_db=yes und log_dir=*stderr nicht verwendet werden
SCHEDU
LER-14
3
Element <run_time> sieht keine Periode für eine Task ohne Startzeit vor
SCHEDU
LER-14
5
<script> com_class= und language= können nicht zugleich angegeben werden
SCHEDU
LER-14
6
Das Skript fehlt
SCHEDU
LER-14
7
SCHEDU
LER-14
8
SCHEDU
LER-14
9
Für den Zustand "(2)" ist kein Job in der Jobkette (1) definiert
SCHEDU
LER-15
0
Für den Zustand "(1)" ist bereits ein Job in der Jobkette (2) definiert
SCHEDU
LER-15
1
Jobkette ist außer Betrieb (add_job_chain() fehlt oder Jobkette wird entfernt)
SCHEDU
LER-15
2
Job "(1)" ist nicht in der Jobkette "(2)"
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
228
Text
SCHEDU
LER-15
3
SCHEDU
LER-15
5
Ein temporärer Job kann keine Aufträge annehmen
SCHEDU
LER-15
6
(1) ist nicht in der Auftragswarteschlange des Jobs "(2)"
SCHEDU
LER-15
7
(1) ist nicht in einer Jobkette
SCHEDU
LER-15
9
Id und Priorität eines Auftrags können nicht mehr geändert werden, wenn er in einer Auftragsliste steht
SCHEDU
LER-16
0
SCHEDU
LER-16
1
SCHEDU
LER-16
2
Auftrag (1) ist nicht in der Jobkette (2)
SCHEDU
LER-16
3
(1) ist nicht einer Auftragswarteschlange
SCHEDU
LER-16
4
<show_... what="(1)">: Ungültige Angabe für Attribut what
SCHEDU
LER-16
6
<script> java_class= und language= können nicht zugleich angegeben werden
SCHEDU
LER-16
7
Bei <script> com_class= oder java_class= kann die Programmquelle nicht angegeben werden
SCHEDU
LER-16
8
In <script> ist com_class= und java_class= zusammen angegeben
SCHEDU
LER-17
2
Die Skriptart (Scripting Engine, Perl, COM oder Java) ist hier nicht möglich
SCHEDU
LER-17
3
Skript fehlt
SCHEDU
LER-17
4
Methode (1) der Klasse (2) fehlt
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
Text
SCHEDU
LER-17
7
Java steht nicht zur Verfügung (siehe Fehler beim Start des Schedulers)
SCHEDU
LER-17
9
<process>-Task hat sich nicht beendet. pid=(1)
229
SCHEDU
LER-18
2
SCHEDU
LER-18
3
SCHEDU
LER-18
4
Die Scheduler-Datenbank ist wegen eines Datenbankproblems gerade nicht geöffnet
SCHEDU
LER-18
6
(1) ist bereits in der Jobkette (2)
SCHEDU
LER-18
7
Order.setback(): Ein Auftrag kann nur zurückgestellt werden, während eine Task ihn ausführt
SCHEDU
LER-18
8
Order.setback() und Order.state= können nicht zusammen gerufen werden, das ist Unsinn
SCHEDU
LER-19
1
separate_process: Unerwarteter Zustand (2) in (1)
SCHEDU
LER-19
4
process_class und separate_process können nicht kombiniert werden
SCHEDU
LER-19
6
use_engine="(1)" ist veraltet
SCHEDU
LER-19
7
Module::java_method_id((1)): Java-Klasse ist unbekannt
SCHEDU
LER-19
8
Variablenname fehlt
SCHEDU
LER-19
9
Die Modulinstanz ist geschlossen
SCHEDU
LER-20
0
Die Remoteinstanz ist geschlossen
SCHEDU
LER-20
1
Das Arbeitsverzeichnis zum Aufruf des Java-Compilers fehlt
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
Text
SCHEDU
LER-20
2
Verbindung zur Task verloren, state=(1): (2)
SCHEDU
LER-20
3
Die Modulinstanz im Server ist geschlossen
SCHEDU
LER-20
4
Der Job "(1)" ist im Fehlerzustand. (2)
230
SCHEDU
LER-20
5
SCHEDU
LER-20
6
need_db=(1), erlaubt sind aber nur yes, no, strict
SCHEDU
LER-20
7
Task (1) unbekannt (auch in der Historie)
SCHEDU
LER-20
8
Hier ist nur ein Datum ohne Uhrzeit möglich
SCHEDU
LER-20
9
Das Microsoft Windows-Limit der Objekte, auf die gewartet werden kann (TCP-Verbindungen,
beobachteten Verzeichnisse etc.) von MAXIMUM_WAIT_OBJECTS-1=(1) ist erreicht. Die Operation ist
nicht ausführbar.
SCHEDU
LER-21
0
Zuviele Prozesse. Die Zahl der Prozesse ist auf (1) begrenzt
SCHEDU
LER-21
2
Eintrag [spooler] html_dir= fehlt in der Datei factory.ini
SCHEDU
LER-21
3
Fehler beim Lesen des HTTP-Kopfs: (1) erwartet
SCHEDU
LER-21
4
Unzulässiger Pfad in HTTP-Anforderung
SCHEDU
LER-21
5
Task (1) unbekannt oder beendet
SCHEDU
LER-21
7
(1) ist in Bearbeitung durch (2)
SCHEDU
LER-21
8
Subprocess pid=(2) hat sich mit exit code=(1) beendet. Command=(3)
SCHEDU
LER-21
9
Subprocess pid=(2) hat sich mit Signal (1) beendet. Command=(3)
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
Text
SCHEDU
LER-22
0
<run_time (1)> ist für einen Auftrag nicht möglich
SCHEDU
LER-22
1
<day day="(1)">: Nur die Tage (2) bis (3) sind möglich
SCHEDU
LER-22
2
Das Kommando <(1)> kann nur über eine TCP-Verbindung gegeben werden
231
SCHEDU
LER-22
3
SCHEDU
LER-22
4
Haupt-Scheduler hat Verbindung geschlossen
SCHEDU
LER-22
5
start_new_file() ist nur fürs Hauptprotokoll möglich
SCHEDU
LER-22
6
Der Auftrag ist nicht verarbeitet worden ist, weil die Task vor dem ersten Jobschritt (spooler_process())
beendet worden ist
SCHEDU
LER-22
7
Scheduler-Skript hat Fehler protokolliert: (1)
SCHEDU
LER-23
0
Der Job "(1)" wird entfernt, er kann nicht mehr verwendet werden
SCHEDU
LER-23
1
Attribut (2) fehlt im XML-Element <(1)>
SCHEDU
LER-23
2
SCHEDU
LER-23
4
<job (1)="..."> Attribut kann nicht überschrieben werden
SCHEDU
LER-23
5
Web-Dienst "(1)" ist unbekannt
SCHEDU
LER-23
6
Web-Dienst "(1)" ist bereits bekannt
SCHEDU
LER-23
7
XSLT-Stylesheet "(1)" liefert kein Ergebnis
SCHEDU
LER-23
8
Web-Dienst für url_path="(1)" ist bereits bekannt
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
232
Text
SCHEDU
LER-23
9
SCHEDU
LER-24
0
Auftrag ist keinem Webdienst zugeordnet
SCHEDU
LER-24
1
Task ist keinem Webdienst zugeordnet
SCHEDU
LER-24
2
forward_xslt_stylesheet (1) liefert nicht <service_request>
SCHEDU
LER-24
3
Eigenschaft (1) ist fixiert, sie kann nicht mehr geändert werden
SCHEDU
LER-24
4
Element <content> fehlt oder ist leer
SCHEDU
LER-24
5
Element <content> hat mehr als ein Element
SCHEDU
LER-24
6
Auftrag gehört nicht zu einer Web-Dienst-Operation
SCHEDU
LER-24
7
HTTP-Antwort wird bereits versendet
SCHEDU
LER-24
8
web_service_operation ist abgeschlossen und nicht mehr gültig
SCHEDU
LER-24
9
Order-Id lässt sich nicht als Zeichenkette darstellen: (1)
SCHEDU
LER-25
0
Order-State lässt sich nicht als Zeichenkette darstellen: (1)
SCHEDU
LER-25
1
Order-Payload lässt sich nicht als Zeichenkette darstellen: (1)
SCHEDU
LER-25
2
Ungültiger Url-Pfad, er muss mit '/' beginnen: (1)
SCHEDU
LER-25
4
(1) Tasks haben sich nicht beendet trotz kill vor (2)s. Die (3)s lange Nachfrist läuft weiter
SCHEDU
LER-25
5
(1) Tasks haben sich nicht beendet trotz kill vor (2) seconds. JobScheduler bricht ab
Nach Web_service_response.send() kann Web_service_response nicht mehr geändert werden.
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
Text
SCHEDU
LER-25
6
Frist zur Beendigung des Schedulers ist abgelaufen, aber (1) Tasks haben sich nicht beendet
SCHEDU
LER-25
7
Job wird jetzt entfernt
SCHEDU
LER-25
8
Job wird entfernt sobald alle Tasks beendet sind
233
SCHEDU
LER-26
0
SCHEDU
LER-26
1
SCHEDU
LER-26
2
Abbruch-Signal ((1)) empfangen. Der JobScheduler wird beendet
SCHEDU
LER-26
3
SCHEDU
LER-26
4
SCHEDU
LER-26
5
SCHEDULER WIRD BEENDET WEGEN FEHLERS BEIM ZUGRIFF AUF DATENBANK
SCHEDU
LER-26
6
Fehler beim Schreiben der Historie: (1)
SCHEDU
LER-26
7
Fehler beim Schreiben des Protokolls in die Tabelle (1): (2)
SCHEDU
LER-26
8
Protokoll der Task (1) lässt sich nicht aus der Datenbank lesen: (2)
SCHEDU
LER-26
9
Fehler beim Schließen der Job-Historie: (1)
SCHEDU
LER-27
0
Historie lässt sich nicht öffnen: (1)
SCHEDU
LER-27
1
Zugunsten des Jobs (1) wird die Task beendet
SCHEDU
LER-27
2
Task wird nach nach Fristablauf von <job timeout="(1)"> abgebrochen
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
234
Code
Text
SCHEDU
LER-27
3
Subprozess (1) wird abgebrochen
SCHEDU
LER-27
4
Subprozess (1) lässt sich nicht abbrechen: (2)
SCHEDU
LER-27
5
Subprozess (1) wird abgebrochen, weil seine Frist überschritten ist
SCHEDU
LER-27
6
Task konnte nicht abgebrochen werden
SCHEDU
LER-27
8
Laufzeitperiode <period> ist abgelaufen, Task wird beendet
SCHEDU
LER-27
9
Prozess hat mit Signal (1) ((2)) geendet
SCHEDU
LER-28
0
Prozess hat mit Exit code (1) (0x(2)) geendet
SCHEDU
LER-28
1
Prozess wird abgebrochen
SCHEDU
LER-28
3
Task (1) aus der Datenbank ist fehlerhaft: (2)
SCHEDU
LER-28
4
cmd='(1)' wird ignoriert, weil Job entfernt wird
SCHEDU
LER-28
5
Max. (1) Historiensätze werden gelesen
SCHEDU
LER-28
7
TCP-Verbindung nicht zugelassen
SCHEDU
LER-28
8
-reuse-port (SO_REUSEADDR): (1) wird verwendet, auch wenn er schon von einer anderen
Anwendung belegt ist
SCHEDU
LER-28
9
(1) ist blockiert. Wir probieren es (2) Sekunden
SCHEDU
LER-29
0
Kein Job hat während der Frist begonnen (1) auszuführen, Auftrag und HTTP-Operation werden
abgebrochen
Siehe <web_service timeout="…"> (Seite 73)
SCHEDU
LER-29
1
Fehler beim Löschen der Protokolldatei: (1)
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
235
Code
Text
SCHEDU
LER-29
2
Email unterdrückt, weil From, To, Subject oder der Nachrichtentext fehlt
SCHEDU
LER-29
3
Warten auf Schließen der Modulinstanz ...
SCHEDU
LER-29
4
Die Java-Klasse (1) konnte nicht geladen werden. Die Java-Quelle wird neu übersetzt, mal sehen, ob's
dann geht
SCHEDU
LER-29
5
Auftrag (1) aus der Datenbank ist fehlerhaft: (2)
SCHEDU
LER-29
7
Auftrag erledigt ohne web_service_operation.send(), Operation wird abgebrochen
SCHEDU
LER-29
8
job=(1) wird ignoriert, weil Auftrag bereits aus der Jobkette entfernt ist
SCHEDU
LER-29
9
Prozess (1) wird nach Fehler entfernt
SCHEDU
LER-30
0
Überwachung des Verzeichnisses (1) wird nach Fehler beendet: (2)
SCHEDU
LER-30
1
UDP-Nachricht von (1) nicht zugelassen
SCHEDU
LER-30
2
Fehler beim eMail-Versand: (1)
SCHEDU
LER-30
3
Fehler beim Zugriff auf die Datenbank: (1)
SCHEDU
LER-30
4
Fehler beim Lesen der nächsten Id (Spalte "(2)"): (1)
SCHEDU
LER-30
5
Fehler beim Einfügen in die Tabelle (1): (2)
SCHEDU
LER-30
6
Fehler beim Update der Tabelle (1): (2)
SCHEDU
LER-30
7
Historiensatz wird wegen vorausgegangenen Datenbankfehlers nicht geschrieben
SCHEDU
LER-30
8
cancel() ignoriert, weil die Antwort schon übertragen wird
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
Text
SCHEDU
LER-30
9
Fehler beim Öffnen der Datenbank: (1)
SCHEDU
LER-31
0
Fehler beim Schließen der Datenbank: (1)
236
SCHEDU
LER-31
1
SCHEDU
LER-31
2
SCHEDU
LER-31
3
SCHEDU
LER-31
4
SCHEDU
LER-31
6
SCHEDU
LER-31
8
SCHEDU
LER-31
9
SCHEDU
LER-32
0
SCHEDU
LER-32
1
SCHEDU
LER-32
2
SCHEDU
LER-32
3
SCHEDU
LER-32
4
SCHEDU
LER-32
5
SCHEDU
LER-32
6
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
237
Text
SCHEDU
LER-32
7
SCHEDU
LER-32
8
SCHEDU
LER-32
9
SCHEDU
LER-33
0
SCHEDU
LER-33
1
SCHEDU
LER-33
2
SCHEDU
LER-33
3
SCHEDU
LER-33
4
SCHEDU
LER-33
5
SCHEDU
LER-33
6
SCHEDU
LER-33
7
SCHEDU
LER-33
8
SCHEDU
LER-33
9
SCHEDU
LER-34
0
SCHEDU
LER-34
2
SCHEDU
LER-34
3
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
238
Text
SCHEDU
LER-34
4
SCHEDU
LER-34
5
SCHEDU
LER-34
6
SCHEDU
LER-34
7
SCHEDU
LER-34
8
SCHEDU
LER-34
9
SCHEDU
LER-35
0
SCHEDU
LER-35
1
SCHEDU
LER-35
3
SCHEDU
LER-35
4
SCHEDU
LER-35
5
SCHEDU
LER-35
7
SCHEDU
LER-35
8
SCHEDU
LER-35
9
SCHEDU
LER-36
0
SCHEDU
LER-36
1
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
239
Text
SCHEDU
LER-36
2
SCHEDU
LER-36
3
SCHEDU
LER-36
5
SCHEDU
LER-36
7
SCHEDU
LER-36
8
SCHEDU
LER-36
9
SCHEDU
LER-37
0
SCHEDU
LER-37
1
SCHEDU
LER-37
2
SCHEDU
LER-37
3
SCHEDU
LER-37
4
SCHEDU
LER-37
5
SCHEDU
LER-37
6
SCHEDU
LER-37
7
SCHEDU
LER-37
8
SCHEDU
LER-37
9
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
240
Text
SCHEDU
LER-38
0
SCHEDU
LER-38
1
SCHEDU
LER-38
4
SCHEDU
LER-38
5
SCHEDU
LER-38
6
SCHEDU
LER-38
9
SCHEDU
LER-39
0
SCHEDU
LER-39
1
SCHEDU
LER-39
2
SCHEDU
LER-39
3
SCHEDU
LER-39
4
SCHEDU
LER-39
6
SCHEDU
LER-39
7
SCHEDU
LER-39
8
SCHEDU
LER-39
9
SCHEDU
LER-40
1
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
241
Text
SCHEDU
LER-40
3
SCHEDU
LER-40
5
SCHEDU
LER-40
6
SCHEDU
LER-40
7
SCHEDU
LER-40
8
SCHEDU
LER-40
9
SCHEDU
LER-41
2
SCHEDU
LER-41
3
SCHEDU
LER-41
4
SCHEDU
LER-41
5
SCHEDU
LER-41
6
SCHEDU
LER-41
7
SCHEDU
LER-41
9
SCHEDU
LER-42
0
SCHEDU
LER-42
2
SCHEDU
LER-42
4
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
242
Text
SCHEDU
LER-42
6
SCHEDU
LER-42
7
SCHEDU
LER-42
8
SCHEDU
LER-42
9
SCHEDU
LER-43
0
SCHEDU
LER-43
1
SCHEDU
LER-43
2
SCHEDU
LER-43
3
SCHEDU
LER-43
4
SCHEDU
LER-43
5
SCHEDU
LER-43
6
SCHEDU
LER-43
7
SCHEDU
LER-43
8
SCHEDU
LER-43
9
SCHEDU
LER-44
0
SCHEDU
LER-44
1
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
243
Text
SCHEDU
LER-44
2
SCHEDU
LER-44
3
SCHEDU
LER-44
5
SCHEDU
LER-44
6
SCHEDU
LER-44
7
SCHEDU
LER-44
8
SCHEDU
LER-44
9
SCHEDU
LER-45
0
SCHEDU
LER-45
1
SCHEDU
LER-45
2
SCHEDU
LER-45
3
SCHEDU
LER-45
4
SCHEDU
LER-45
5
SCHEDU
LER-45
6
SCHEDU
LER-45
7
SCHEDU
LER-45
8
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
244
Text
SCHEDU
LER-45
9
SCHEDU
LER-46
0
SCHEDU
LER-46
1
SCHEDU
LER-46
2
SCHEDU
LER-46
3
SCHEDU
LER-46
4
SCHEDU
LER-46
5
SCHEDU
LER-46
6
SCHEDU
LER-46
7
SCHEDU
LER-46
8
SCHEDU
LER-46
9
SCHEDU
LER-47
0
SCHEDU
LER-47
1
SCHEDU
LER-47
2
SCHEDU
LER-47
3
SCHEDU
LER-47
4
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
245
Text
SCHEDU
LER-47
5
SCHEDU
LER-47
7
SCHEDU
LER-47
8
SCHEDU
LER-47
9
SCHEDU
LER-48
0
SCHEDU
LER-48
1
SCHEDU
LER-48
2
SCHEDU
LER-48
3
SCHEDU
LER-48
4
SCHEDU
LER-48
5
SCHEDU
LER-48
6
SCHEDU
LER-90
0
Scheduler (1) startet mit (2), pid=(3)
SCHEDU
LER-90
2
SCHEDU
LER-90
4
Die Tasks haben (1)s sich zu beenden
SCHEDU
LER-90
6
SCHEDU
LER-90
7
Datenbank wird geöffnet(1)
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
Text
SCHEDU
LER-90
8
Datenbank-Tabelle (1) wird um die Spalte (2) erweitert: (3)
SCHEDU
LER-90
9
Datenbank-Tabelle (1) wird eingerichtet
246
SCHEDU
LER-91
2
SCHEDU
LER-91
3
Bisherige Historie ist archiviert worden unter (1)
SCHEDU
LER-91
4
SCHEDU
LER-91
5
SCHEDU
LER-91
6
idle_timeout ist abgelaufen, Task beendet sich
SCHEDU
LER-91
7
Zu startende Task aus Datenbank geladen: id=(1) start_at=(2)
SCHEDU
LER-91
8
SCHEDU
LER-91
9
Task (1) in Warteschlange eingereiht
SCHEDU
LER-92
0
Skript wird erneut gelesen (<include> wird erneut ausgefhrt)
SCHEDU
LER-92
1
SCHEDU
LER-92
2
Keine weitere Periode
SCHEDU
LER-92
3
Wiederholung wegen delay_after_error: (1)
SCHEDU
LER-92
4
Erster Start zu Beginn der Periode: (1)
SCHEDU
LER-92
5
Wiederholung wegen spooler_job.repeat=(1): (2)
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
Text
SCHEDU
LER-92
6
Nächste Wiederholung wegen <period repeat="(1)">: (2)
SCHEDU
LER-92
7
Nächste Startzeit wird bestimmt zu Beginn der nächsten Periode: (1)
SCHEDU
LER-92
8
Nächster single_start (1)
SCHEDU
LER-93
0
Task (1) gestartet, Anlass: (2)
SCHEDU
LER-93
1
state=(1)
SCHEDU
LER-93
3
TCP-Verbindung angenommen
247
SCHEDU
LER-93
4
SCHEDU
LER-93
5
(1) Aufträge aus der Datenbank gelesen
SCHEDU
LER-93
6
SCHEDU
LER-93
7
SCHEDU
LER-93
8
Auftrag wird ausgeführt um (1)
SCHEDU
LER-93
9
Auftrag mit gleicher Id wird ersetzt: (1)
SCHEDU
LER-94
0
Auftrag wird aus der Jobkette entfernt
SCHEDU
LER-94
1
Auftrag wird aus der Jobkette entfernt, aber weiterhin von (1) ausgeführt
SCHEDU
LER-94
2
add_or_replace_order(): Auftrag wird verzögert bis (1) (2) ausgeführt hat
SCHEDU
LER-94
3
(1) mal zurückgestellt. Der Auftrag wechselt in den Fehlerzustand
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
Text
SCHEDU
LER-94
4
Kein weiterer Job in der Jobkette, der Auftrag wird mit state=(1) wiederholt um (2)
SCHEDU
LER-94
5
Kein weiterer Job in der Jobkette, der Auftrag ist erledigt
SCHEDU
LER-94
6
setback(): Auftrag zum (1). Mal zurückgestellt, bis (2)
SCHEDU
LER-94
7
setback(): Auftrag zum (1). Mal zurückgestellt, das ist über dem Maximum (2) des Jobs
SCHEDU
LER-94
8
Prozess (1) gestartet
248
SCHEDU
LER-94
9
SCHEDU
LER-95
0
Scheduler ist registriert
SCHEDU
LER-95
1
Sommerzeit beginnt
SCHEDU
LER-95
2
Winterzeit beginnt
SCHEDU
LER-95
3
Noch (1) Sekunden schlafen ...
SCHEDU
LER-95
4
XSLT-Stylesheet (1)="(2)" liefert:
SCHEDU
LER-95
5
UDP-Nachricht von (1): (2)
SCHEDU
LER-95
6
Scheduler erwartet Kommandos über (1)-Port (2)
SCHEDU
LER-95
7
Datenbank wird geschlossen
SCHEDU
LER-95
8
(1) Sekunden warten bevor Datenbank erneut geöffnet wird ...
SCHEDU
LER-95
9
Historie wird von Datenbank auf Dateien umgeschaltet
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
249
Text
SCHEDU
LER-96
0
SCHEDU
LER-96
1
SCHEDU
LER-96
2
SCHEDU
LER-96
3
SCHEDU
LER-96
4
Neuer (1)
Der Web-Service hat einen Auftrag erzeugt und der Jobkette übergeben.
SCHEDU
LER-96
5
SCHEDU
LER-96
6
SCHEDU
LER-96
7
SCHEDU
LER-96
8
SCHEDU
LER-96
9
SCHEDU
LER-97
0
SCHEDU
LER-97
2
SCHEDU
LER-97
3
SCHEDU
LER-97
4
SCHEDU
LER-97
5
SCHEDU
LER-97
6
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
250
Text
SCHEDU
LER-97
7
SCHEDU
LER-97
8
SCHEDU
LER-97
9
SCHEDU
LER-98
0
SCHEDU
LER-98
1
SCHEDU
LER-98
2
SCHEDU
LER-98
3
SCHEDU
LER-98
4
SCHEDU
LER-98
5
SCHEDU
LER-98
6
SCHEDU
LER-98
7
SCHEDU
LER-98
9
SCHEDU
LER-99
0
SCHEDU
LER-99
1
SCHEDU
LER-99
2
SCHEDU
LER-99
4
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
251
Text
SCHEDU
LER-99
5
SCHEDU
LER-99
6
SCHEDU
LER-99
7
SCHEDU
LER-99
9
Scheduler ordentlich beendet
SCHEDU
LER-80
5
SCHEDU
LER-80
6
SCHEDU
LER-80
7
SCHEDU
LER-80
9
SCHEDU
LER-81
1
SCHEDU
LER-81
2
SCHEDU
LER-81
3
SCHEDU
LER-81
4
SCHEDU
LER-81
5
SCHEDU
LER-81
6
SCHEDU
LER-81
7
SCHEDU
LER-81
9
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
252
Text
SCHEDU
LER-82
0
SCHEDU
LER-82
1
SCHEDU
LER-82
2
SCHEDU
LER-82
3
SCHEDU
LER-82
5
SCHEDU
LER-82
6
SCHEDU
LER-82
7
SCHEDU
LER-82
9
SCHEDU
LER-83
0
SCHEDU
LER-83
1
SCHEDU
LER-83
2
SCHEDU
LER-83
3
SCHEDU
LER-83
4
SCHEDU
LER-83
5
SCHEDU
LER-83
6
SCHEDU
LER-83
7
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
253
Text
SCHEDU
LER-83
8
SCHEDU
LER-83
9
SCHEDU
LER-84
1
SCHEDU
LER-84
2
SCHEDU
LER-84
3
SCHEDU
LER-84
4
SCHEDU
LER-84
5
SCHEDU
LER-84
6
SCHEDU
LER-84
7
SCHEDU
LER-84
8
SCHEDU
LER-84
9
SCHEDU
LER-85
0
SCHEDU
LER-85
1
SCHEDU
LER-85
2
SCHEDU
LER-85
3
SCHEDU
LER-85
4
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
254
Text
SCHEDU
LER-85
5
SCHEDU
LER-85
6
SCHEDU
LER-85
7
SCHEDU
LER-85
8
SCHEDU
LER-85
9
SCHEDU
LER-86
0
SCHEDU
LER-86
1
SCHEDU
LER-86
2
SCHEDU
LER-86
3
SCHEDU
LER-87
1
SCHEDU
LER-87
2
SCHEDU
LER-87
3
SCHEDU
LER-87
4
SCHEDU
LER-87
5
SCHEDU
LER-87
6
SCHEDU
LER-87
7
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
255
Text
SCHEDU
LER-87
8
SCHEDU
LER-87
9
SCHEDU
LER-88
0
SCHEDU
LER-88
1
SCHEDU
LER-88
2
SCHEDU
LER-88
4
SCHEDU
LER-88
5
SCHEDU
LER-88
6
SCHEDU
LER-88
7
SCHEDU
LER-88
8
SCHEDU
LER-88
9
SCHEDU
LER-89
0
SCHEDU
LER-89
1
SCHEDU
LER-89
2
SCHEDU
LER-89
3
SCHEDU
LER-89
4
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
256
Text
SCHEDU
LER-89
5
SCHEDU
LER-89
7
SCHEDU
LER-89
8
SCHEDU
LER-89
9
SCHEDU
LER-70
1
SCHEDU
LER-70
2
SCHEDU
LER-70
3
SCHEDU
LER-70
4
SCHEDU
LER-70
5
SCHEDU
LER-70
6
SCHEDU
LER-70
7
SCHEDU
LER-70
8
SCHEDU
LER-70
9
SCHEDU
LER-71
0
SCHEDU
LER-71
1
SCHEDU
LER-71
2
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
257
Text
SCHEDU
LER-71
3
SCHEDU
LER-71
4
SCHEDU
LER-71
5
SCHEDU
LER-71
6
SCHEDU
LER-71
7
SCHEDU
LER-71
8
SCHEDU
LER-71
9
SCHEDU
LER-72
0
SCHEDU
LER-72
1
SCHEDU
LER-72
2
SCHEDU
LER-72
3
SCHEDU
LER-72
4
SCHEDU
LER-72
5
A.2 Messages für Paket Separate processes
Code
Text
Z-REMOTE-1 Objectserver: Fehler: (1)
00
Z-REMOTE-1 Objectserver pid=(1): TCP-Verbindung ist abgebrochen
01
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
258
Text
Z-REMOTE-1 Objectserver: Unbekannte Proxy-Id (1)
02
Z-REMOTE-1 Objectserver: Nicht registriertes Objekt (1)
03
Z-REMOTE-1 Objectserver: Session-Id ist nicht korrekt
04
Z-REMOTE-1 Objectserver: Session-Kommando unbekannt (Fehler in der Kommunikation)
05
Z-REMOTE-1 Objectserver: Session-Klasse unbekannt (Fehler in der Kommunikation)
06
Z-REMOTE-1 Objectserver pid=(1): Ungültige Antwort
07
Z-REMOTE-1 Objectserver: Variant-Typ (1) ist nicht übertragbar
08
Z-REMOTE-1 Objectserver: Fehler in der Kommunikation (Nachricht ist zu kurz)
09
Z-REMOTE-1 Objectserver: Zwei Operationen gleichzeitig
11
Z-REMOTE-1 Objectserver: Programm hat Ergebnis der Operation nicht übernommen: (1)
12
Z-REMOTE-1 Objectserver: Programm will Ergebnis einer anderen Operation übernehmen
13
Z-REMOTE-1 Objectserver: Programm will Ergebnis einer nicht abgeschlossenen Operation übernehmen
14
Z-REMOTE-1 Objectserver pid=(1): Nachricht mit zu großer oder ungültiger Länge (2)
15
Z-REMOTE-1 Objectserver pid=(1): Der Objektserver war nicht innerhalb der Wartezeit von (2)s bereit
18
Z-REMOTE-1 Objectserver: Gleichzeitige Operationen auf derselben Verbindung. Erste Operation: (1); Zweite
19
Operation: (2)
Z-REMOTE-1 Objectserver: Objekt-Id ist unbekannt
20
Z-REMOTE-1 Objectserver: pop_operation, aber Stack ist leer, Methode=(1)
21
Z-REMOTE-1 Objectserver pid=(1): Der Prozess ist (vom Aufrufer) abgebrochen worden
22
Z-REMOTE-1 Objectserver pid=(1): Der Prozess hat sich unerwartet beendet
23
Z-REMOTE-1 Objectserver: Benannte Parameter sind nicht möglich
24
Z-REMOTE-1 Objectserver: DISPID (1) nicht bekannt
25
Z-REMOTE-1 Objectserver: Default-Proxy für (1) kennt keine Eigenschaften
26
Z-REMOTE-1 Objectserver: Mehr Daten empfangen als angekündigt. Fehlerhafte Daten empfangen.
27
Software- und Organisations-Service GmbH
August 2014
Meldungen des Schedulers
Code
259
Text
Z-REMOTE-1 Objectserver: v.vt stimmt nicht mit SafeArrayGetVartype() überein
28
Z-REMOTE-1
29
Z-REMOTE-1
30
A.3 Messages für Paket Charset
Code
Text
Z-CHARSET-001
Unbekannte Zeichen-Codierung: (1)
Z-CHARSET-002
Zeichen-Codierung ist nicht angegeben
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
260
Anhang B: Änderungsprotokoll
Revision
Datum
Bemerkung
2.1.3.6332
2010-10-05
JS-448: warn_if_longer_than
Attribut korrekt verarbeiten
Die Warnung, dass eine Task länger
als geplant läuft
(warn_if_longer_than Attribut), dann
als Mail absenden, wenn der
Zeitpunkt erreicht und nicht erst am
Ende der Task. Außerdem
Behandlung der Angabe in Prozent
korrigiert (s. Jira-Eintrag).
2.1.3.6321
2010-09-29
JS-544: Port for SMTP Mail-Server
cannot be configure
Ist die Eigenschaft smtp sowohl in
sos.ini ([mail].smtp) als auch in
factory.ini [spooler].smtp leer oder
nicht angegeben, wird die
Einstellung in factory.ini [smtp]
mail.smtp.host gelöscht. In der
Dokumentation zu factory.ini [smtp]
ist ein Hinweis auf die Möglichkeit
den SMPT Port einzustellen,
aufgenommen worden.
2.1.3.6308
2010-09-27
JS-456: An persistent order with
single start far in the future will be
deleted, wenn an error occurs
Hat ein Job eine Periode, der
Job-Scheduler startet vor
Periodenbeginn und es befinden
sich zum Start im
Fileorders-Verzeichnis Dateien,
dann wurden dafür keine Aufräge
erzeugt.
2.1.3.6308
2010-09-27
JS-551: Inaktivieren von Jobs
Das Job-Element der XML
Konfiguration hat ein neues Attribut
"enabled". Es kann die Werte yes,
no annehmen. Der Wert "no"
bewirkt, dass intern der Job
gestoppt wird. Die XML-Antwort
enthält auch dieses Attribut und
ermöglicht es dem Operations GUI
diesen Job-Status abweichend vom
gestoppt-Status entsprechend
darzustellen.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
261
Revision
Datum
Bemerkung
2.1.3.6304
2010-09-23
JS-552: Aufträge im Status
suspended sollen bei Änderung
der Konfiguration nicht in Status
resumed wechseln
Aufträge im Status suspended sollen
dort bleiben, auch wenn die
Konfigurationsdatei geändert wird.
2.1.3.6299
2010-09-22
JS-463: Fileorders will not be
handled when the first job in job
chain has a period
Hat ein Job eine Periode, der
Job-Scheduler startet vor
Periodenbeginn und es befinden
sich zum Start im
Fileorders-Verzeichnis Dateien,
dann wurden dafür keine Aufräge
erzeugt.
2.1.3.6295
2010-09-21
JS-425: Im Fehlerfall werden jetzt
nur noch mails versendet, wenn
mail_on_error=yes gesetzt ist
Bei Auftreten eines Fehlers werden
jetzt nur noch Mail versendet, wenn
mail_on_error=yes gesetzt ist. Ein
implizites Setzen von mail_on_error
durch die Angabe von
mail_on_warn=yes findet nicht mehr
statt.
2.1.3.6295
2010-09-21
JS-425: Im Fehlerfall werden jetzt
nur noch mails versendet, wenn
mail_on_error=yes gesetzt ist
Bei Auftreten eines Fehlers werden
jetzt nur noch Mail versendet, wenn
mail_on_error=yes gesetzt ist. Ein
implizites Setzen von mail_on_error
durch die Angabe von
mail_on_warn=yes findet nicht mehr
statt.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
262
Revision
Datum
Bemerkung
2.1.3.6269
2010-09-02
JS-563: exit_code ist jetzt in
spooler_task_after abrufbar
Über spooler_task-after() ist jetzt der
exit_code von spooler_process()
abrufbar. Eine Abfrage des
exit_code in spooler_process_after()
ist nicht möglich, da die task in
dieser Stelle noch nicht beendet ist
und der exit_code damit zu diesem
Zeitpunkt noch nicht zur Verfügung
steht. Der in spooler_process()
gesetzte exit_code kann
überschrieben in zurückgesetzt
werden.
2.1.2.6164
2010-07-07
JS-538: Neues Attribut
max_orders steuert den
Parallellauf von Jobketten
Für das Element job_chain wurde
das Attribut max_orders eingeführt.
Es bestimmt, wie viele Orders
parallel diese Jobkette ausführen
können. Fehlt dieses Attribut können
es beliebig viele sein.
max_orders="1" führt die gesamte
Jobkette exklusiv für eine Order aus,
bevor die nächste Order für diese
Jobkette starten kann.
2.1.1.6132
2010-06-22
JS-462: Die
Kommandozeilenoption
configuration-directory (live
folder) steht zur Verfügung wie
dokumentiert
Das live Verzeichnis kann mit der
Kommandozeilenoption
configuration-directory angegeben
werden.
2.1.1.6103
2010-05-28
JS-506: Kommando <show_state
what='folders no_subfolder'>
zeigt Namen der Unterordner.
Das Kommando <show_state
what='folders no_subfolder'> liefert
die Namen der Unterordner, aber
nicht deren Inhalte.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
263
Revision
Datum
Bemerkung
2.1.1.6101
2010-05-07
JS-343: Die Angabe von
@absolute_repeat berücksichtigt
jetzt auch die erste Startzeit.
Wurde @absolute_repeat in einer
run_time angegeben, ist unter
bestimmten Umständen die erste
Startzeit nicht korrekt ermittelt
worden.
2.1.1.6096
2010-05-04
JS-380: Jobscheduler 'friert' nicht
mehr ein, wenn Job auf 'suspend'
gesetzt wird.
Bei API Jobs kam es gelegentlich zu
dem Problem, dass der gesamte
Jobscheduler 'eingefroren' ist, wenn
ein Job auf 'suspend' gesetzt
worden ist. Das ist immer dann
passiert, wenn das 'suspend'
innerhalb einer Operation
(spooler_start, spooler_process ...)
ausgeführt worden ist.
2.1.1.6089
2010-04-28
JS-481: Nicht mehr benötigte TCP
Verbindungen werden jetzt
zuverlässig freigegeben.
Beim Öffnen einer neuen TCP
Verbindung wird geprüft, ob es
bereits eine nicht mehr benötigte
Verbindung für diesen host/port
registriert ist.
2.1.1.6078
2010-04-27
JS-471: Mehr als 64 paralle
Prozesse unter Windows möglich.
Unter Windows besteaht bisher die
Beschränkung auf 64 parallel
laufende Prozesse. Die mögliche
Anzahl ist jetzt analog zu der unter
Unix.
2.1.0.6078
2010-04-13
JS-409: Startzeitpunkt eines Jobs
kann jetzt beliebig festgelegt
werden.
Der Startzeitpunkt eines Jobs kann
jetzt um mehr als 24 Stunden in die
Zukunft gelegt werden.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
264
Revision
Datum
Bemerkung
2.1.0.6078
2010-04-13
JS-444: Auch für Monitore werden
Includes in der laufenden
Scheduler-Instanz aufgelöst und
an den Monitor-Prozess
übergeben.
Die mit dem Attribute live_file
bezeichnete Datei wird jetzt bei
Änderung nachgeladen, dazu muss
die Datei LOKAL abgelegt sein.
2.1.0.6078
2010-04-13
JS-457: Zeitstempel der
Konfigurationsdateien werden
jetzt als UTC gekennzeichnet
Der Zeitstempel der
Konfigurationsdateien werden jetzt
als UTC gekennzeichnet.
2.1.0.6070
2010-03-23
JS-421:
SCHEDULER_RETURN_VALUES
bei Verwendung von Monitoren
unter UNIX möglich
2.1.0.6065
2010-04-13
JS-421: Umgebungsvariable
zwischen Scripten werden jetzt
richtig übergeben.
Shell-Scripte können
Umgebungsvariablen, die von
vorhergehenden Scripten gesetzt
worden sind, jetzt korrekt auslesen.
2.0.223.6010
2009-06-12
Neue API-Aufrufe
Order.setback_count und
Job.setback_max
•
•
2.0.222.6007
2009-05-07
Order.setback_count
Job.setback_max
<job warn_if_shorter_than und
warn_if_longer_than>
Wenn die Dauer eines Jobschritts
von einer Vorgabe abweicht, gibt der
JobScheduler eine Warnung aus.
•
•
2.0.221.5985
2009-03-20
<job
warn_if_shorter_than="…">
<job
warn_if_longer_than="…">
Windows: kill bricht alle
Kindprozesse ab
Ein <kill_task> auf einen
Shell-Job bricht auch alle Kind- und
Kindeskind-Prozesse ab, wie bereits
unter Unix.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
265
Revision
Datum
Bemerkung
2.0.221.5980
2009-03-10
Monitor für Shell-Jobs
Ein <monitor> kann jetzt auch für
Nicht-API-Jobs angegeben werden.
•
<monitor>
Datenbankproblem mit der
Stunde zwischen Winter- und
Sommerzeit gelöst
2.0.220.5972
2009-03-02
Nach kill -9 wird Dauerauftrag
nicht mehr sofort beim nächsten
Scheduler-Lauf gestartet
<settings> in <job>
•
•
•
•
•
•
•
•
•
•
•
•
•
2.0.220.5970
2009-02-25
<settings>
<mail_on_error>
<mail_on_warning>
<mail_on_success>
<mail_on_process>
<
mail_on_delay_after_error
>
<log_mail_to>
<log_mail_cc>
<log_mail_bcc>
<log_level>
<history>
<history_on_process>
<history_with_log>
Scheduler als Unix-Daemon leitet
stdout/stderr in Datei um
Wie es sich für einen Daemon
gehört, schließt der JobScheduler
stdout und stderr und leitet die
Ausgaben in die Datei
scheduler.out. Diese Datei muss
beschreibbar sein.
•
2.0.219.5968
2009-01-27
Siehe Option -service
libhostjava.so im JobScheduler
für HP-UX/Itanium eingebunden
Im Gegensatz zu HP-UX/PA-RISC
ist jetzt für Itanium die
libhosthava.so in den JobScheduler
eingebunden. Damit tritt das
"com_construct-Problem" nicht mehr
auf.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
266
Revision
Datum
Bemerkung
2.0.219.5966
2009-01-21
Unter Unix mit kill abgebrochene
Task führt zum Task-Fehler
Damit ist das Verhalten unter Unix
wie unter Windows.
JS-321: Backup-Scheduler
übernimmt wieder Job-, Task-,
Jobketten- und
Auftragseinstellungen
Im Betrieb mit einem
Backup-Scheduler werden die
Spalten cluster_member_id nicht
mehr gefüllt. Die Spalten werden nur
nur im Betrieb für verteilte Aufträge
gefüllt, so dass die Datensätze nur
dann den Cluster-Membern fest
zugeordnet sind.
2.0.219.5963
2008-12-12
JS-305: Zurücksetzen eines
Auftrags
•
2.0.218.5961
2008-11-18
<modify_order
action="reset">
<script language="shell">:
.cmd-Datei wird in
OEM-Codierung erstellt
•
<script language="script"
>
Windows verlangt für Batch-Dateien
die OEM-Codierung. Wenn ein
Zeichen aus <script> nicht
umgesetzt werden kann, bricht der
JobScheduler den Job mit der
Meldung SCHEDULER-471 ab. Jedoch
ignoriert der JobScheduler schon
beim Einlesen der
XML-Konfiguration Zeichen, die
nicht in Latin1 sind, siehe .
[
E
R
R
O
R
]
2.0.217.5956
2008-11-12
Not supported character
for encoding ''
JS-316: Neue
Umgebungsvariablen für
Nicht-API-Jobs
•
Software- und Organisations-Service GmbH
SCHE
DULE
R-47
1
<process>
August 2014
Änderungsprotokoll
267
Revision
Datum
Bemerkung
2.0.216.5953
2008-11-05
Transaktionsisolation für Sybase
geändert
Für Sybase ist jetzt read committed
eingestellt.
<start_job force="no">: Task
starten, ohne Job zu entstoppen
•
<start_job force="no">
Fehlermeldung
Z-ASYNC-SOCKET-001 unter
Windows korrigiert
Eine interne Sicherheitsprüfung, die
nur für Unix vorgesehen ist,
verhinderte unter Windows
gelegentlich den Start eines Jobs.
Fehler aus 2.0.214.5927 (Jobs in
der Datenbank) korrigiert
Außerdem die Spalten der Tabelle
SCHEDULER_JOB_CHAIN_NODES
verschmälert.
2.0.215.5938
Software- und Organisations-Service GmbH
2008-10-28
Kleine Korrektur der
Log-Kategorien
August 2014
Änderungsprotokoll
268
Revision
Datum
Bemerkung
2.0.215.5937
2008-10-22
Bei besonderem Lizenzsschlüssel
liefert der JobScheduler das
Datenbankkennwort
Der Lizenzschlüssel kann per <
licence.use> übergeben werden.
Daraufhin unterdrückt der
JobScheduler nicht länger in der
Antwort von <show_state> die
Zeichenfolge, die mit -password=
beginnt.
•
•
<licence.use> .
<state db="…"> .
Allgemeines zentrales
Konfigurationsverzeichnis kann
gelöscht werden
Wenn das zentrale allgemeine
Konfigurationsverzeichnis gelöscht
wird, lässt der Supervisor in allen
angeschlossenen Schedulern die
entsprechenden Objekte löschen.
•
•
2.0.214.5927
2008-10-16
<config
central_configuration_dir
ectory="…"> .
<config supervisor="…"> .
Gestoppte Jobs, Jobketten und
Jobkettenknoten bleiben über
Scheduler-Neustart hinweg
gestoppt
Der Zustand der Jobs, Jobketten
und Jobkettenknoten wird in der
Datenbank gehalten. Wenn eins
dieser drei Objekte gelöscht wird,
wird auch der dazugehörige
Datenbankeintrag gelöscht.
•
<modify_job cmd="stopped"
> . Wenn der Job wegen
Herunterfahrens des
Schedulers gestoppt wird, wird
das nicht in der Datenbank
vermerkt.
•
•
Software- und Organisations-Service GmbH
<job_chain.modify
state="stopped">
<job_chain_node.modify
action="stop"> : Der Wert
von action bleibt erhalten.
August 2014
Änderungsprotokoll
269
Revision
Datum
Bemerkung
2.0.213.5922
2008-10-07
Verschachtelte Jobketten mit
Großbuchstaben funktionieren
Großbuchstaben im Namen der
übergeordneten Jobkette konnten
den JobScheduler abbrechen
lassen. Das ist behoben. In
Jobkettennamen werden große wie
kleine Buchstaben angesehen.
In der Datenbank werden die
Jobkettennamen in Großschreibung
belassen. Aufträge werden nur
wiedergefunden, wenn die
Großschreibung sich nicht ändert.
Jobkettennamen sollten in der
Datenbank normalisiert, also
kleingeschrieben, gespeichert
werden.
2.0.213.5918
2008-10-04
Hauptprotokoll im
Browser-Fenster bricht nicht
mehr ab
Das Hauptprotokoll im
Browser-Fenster bricht jetzt nicht
mehr ab. Das passierte, nachdem
das Hauptprotokoll wegen eines
Fehler beim Scheduler-Start
versendet worden ist.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
270
Revision
Datum
Bemerkung
2.0.213.5914
2008-10-02
$-Substitition mit \ abschaltbar
Das Zeichen »\« vor »$« liefert das
Zeichen »$«, ohne eine Variable zu
ersetzen.
Siehe (Seite 95).
<kill_task> auf
Nicht-API-Prozessen unter Unix
bricht alle Kindprozesse ab
•
<kill_task>
Die Meldungen SCHEDULER-277 und
SCHEDULER-282 werden nicht mehr
ausgegeben.
Neue Kommandos zum Schalten
der Log-Kategorien
•
•
•
2.0.212.5882
2008-09-11
<
scheduler_log.log_categor
ies.show>
<
scheduler_log.log_categor
ies.set>
<
scheduler_log.log_categor
ies.reset>
".." ist in allen Pfaden möglich
Pfade, die auf ein Scheduler-Objekt
verweisen (Job, Jobkette usw.)
können mit ".." ins obere Verzeichnis
verweisen. Zum Beispiel in
•
2.0.211.5876
2008-09-07
<job_chain_node job="…">
Implementierung der
verschachtelten Jobketten
überarbeitet
scheduler.log zeigt Tag des
Monats in der ersten Spalte
Diagnosemeldung beim Fehlstart
eines Prozesses
Wenn ein Nicht-API-Prozess unter
Unix sich nicht starten lässt (Fehler
bei execvp), gibt der JobScheduler
die execvp-Parameterliste und die
Umgebungsvariablen aus.
•
•
Software- und Organisations-Service GmbH
<process>
<script language="shell">
August 2014
Änderungsprotokoll
271
Revision
Datum
Bemerkung
2.0.210.5864
2008-08-22
Anpassung an verschachtelte
Jobketten
<add_order state="…"> und <
add_order end_state="…"> sind
jetzt auf verschachtelte Jobketten
anwendbar.
2.0.210.5860
2008-08-14
Perl-API unter Unix
(libsosperlscript.so) verbessert
•
•
Log.level : $spooler_log->
LetProperty( 'level', ... )
funktioniert.
Die Perl-Schnittstelle versucht
jetzt, jeden unbekannten Typ
als String zu erkennen, so
dass auch folgende Sequenz
funktioniert, deren zweite
Anweisungen $a von einem
SVt_IV in einen SVt_PVIV
wandelt:
my $a = 1;
my $x = "$a";
$spooler_log->info( $a
)
Klasse Run_time für Java
ermöglicht
Run_time kann auch in Java benutzt
werden.
2.0.210.5838
2008-07-25
Neue Umgebungsvariable
SCHEDULER_TASK_ID
Siehe <process> (Seite 57).
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
272
Revision
Datum
Bemerkung
2.0.210.5837
2008-07-22
XML-Kommandos zum Setzen
und Lesen der
Scheduler-Parameter
•
•
•
•
<param>
<param.get>
<params>
<params.get>
Umgang mit Feiertagen: <period
when_holiday="…">
•
•
<period when_holiday="…">
<run_time
when_holiday="…">
Der JobScheduler sieht zwanzig
Jahre voraus, längstens aber bis
2038.
Wochentage, zum Beispiel
Samstag und Sonntag, als
Feiertage deklarierbar
•
<holidays><weekdays>
Aufträge mit inkludierten
Parameterdateien
<order> <params><include> ist
möglich. Bei einem dateibasierten
Auftrag kann die inkludierte Datei
überwacht werden.
<job timeout="…"> gilt auch für
Nicht-API-Jobs
•
2.0.208.5817
2008-07-02
<job timeout="…">
Dateiaufträge beschleunigt
Wenn der erste Job der Jobkette
mehrere Tasks erlaubt ( <job
tasks="…"> ), füttert der
JobScheduler die Jobkette jetzt
schneller mit den Dateiaufträgen..
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
273
Revision
Datum
Bemerkung
2.0.208.5814
2008-06-30
Doppeltes "To:" aus
Mail-Verzeichnis entfernt
Die im eMail-Verzeichnis (
factory.ini (Abschnitt [spooler],
Eintrag mail_queue_dir= …))
abgelegten Dateien enthielten zur
Kompatibilität mit einer alten
Mail-Software eine zusätzlich
"To:"-Zeile. Die Zeile wird nicht mehr
eingefügt. Es sollte eine aktuelle
Mail-Software (mail.jar oder
w3jmail44.dll) eingesetzt werden.
Variable_set.set_value() auch in
Java möglich
Der schreibende Aufruf von
Variable_set.value ist jetzt auch
in Java möglich.
Der Aufruf ist damit durchgängig
eingeführt und ersetzt
Variable_set.var , der in
JavaScript nicht möglich ist.
spooler_log.new_filename
Log.new_filename kann jetzt auch
unter Unix verwendet werden.
Dokumentation erweitert
Log.mail_on_process ergänzt;
Texte aus settings.xml werden auf
den API-Seiten gezeigt.
2.0.208.5811
2008-06-26
API um Sperren erweitert
•
•
•
•
Task.try_hold_lock()
Task.try_hold_lock_non_ex
clusive()
Task.call_me_again_when_l
ocks_available()
Antwort-Element <task
state="…"> : neue Zustände
opening,
opening_waiting_for_locks
und
running_waiting_for_locks.
2.0.207.5799
Software- und Organisations-Service GmbH
2008-06-09
Auf Microsoft Visual Studio 2008
umgestellt
August 2014
Änderungsprotokoll
274
Revision
Datum
Bemerkung
2.0.206.5789
2008-05-25
spidermonkey.dll und
libspidermoneky.so: Verhalten bei
Boole'sch true verbessert
Boole'sch true wird jetzt immer als
derselbe interne Wert geliefert,
sodass folgender Code funktioniert:
spooler_log.mail_on_success
= true;
var a =
spooler_log.mail_on_success
;
if( a != true )
spooler_log.error( a + "!="
+ true ); // Okay ab
Spidermonkey 1.7.0.5789
Dokumentation korrigiert
•
•
Log.last ist nur lesbar.
Log.last_error_line ist nur
lesbar.
2.0.206.5787
2008-05-19
Umstellung der Datenbankspalte
SCHEDULER_HISTORY.END_TIM
E auf NULL
Anpassung an MySQL 5, das
"0000-00-00" für fehlenden Feldwert
schreibt, wenn die Spalte mit NOT
NULL deklariert ist.
Order.priority wird jetzt richtig
interpretiert
•
Order.priority : Höhere
Priorität ordnet einen Auftrag
vorne in die
Auftragswarteschlange ein.
Verteilte Aufträge schreiben
wieder nur einen Historiensatz
Seit Version 2.0.194.8488
(2008-01-05) schrieben verteilte
Aufträge für jeden Schritt einen
Historiensatz. Das ist korrigiert.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
275
Revision
Datum
Bemerkung
2.0.205.5781
2008-05-09
Order.job deleted
•
Order .job ausgebaut.
<show_state what="source"
•
<show_state what="source"
> zeigt XML-Quellen
<schedule.remove> entfernt ein
Schedule
•
<schedule.remove> entfernt
ein Schedule
2.0.204.5773
2008-05-06
JS-279: Weitere
Umgebungsvariablen für
Nicht-API-Jobs
•
2.0.203.5764
2008-04-29
<process>
JS-271: XML-Dokument in einem
Konfigurationsverzeichnis
anlegen: <modify_hot_folder>
•
<modify_hot_folder>
JS-245: Neues XML-Element <
schedule>: Benannte <run_time>
•
•
•
<schedule>
<schedules>
<show_state
what="schedules">
JS-274: Job_chain.title
•
•
2.0.202.5728
2008-04-21
<job_chain title="…">
Job_chain.title
Problem beim gleichzeitigen Start
zweier Cluster-Scheduler
behoben
Beim gleichzeitigen Start zweier
JobScheduler desselben Clusters
konnte ein JobScheduler beim Start
hängen bleiben. Das ist behoben.
2.0.202.5723
2008-04-18
JS-265: Order.end_state
•
•
•
•
2.0.201.5696
Software- und Organisations-Service GmbH
2008-04-02
<order end_state="…">
<add_order end_state="…">
<modify_order
end_state="…">
Order.end_state
Anpassungen an Sybase
Adaptive Server Enterprise
August 2014
Änderungsprotokoll
276
Revision
Datum
Bemerkung
2.0.201.5692
2008-03-31
JS-60: <script> </script> wirkt wie
<script/>
Leere Textknoten (nur Leerzeichen,
Zeilenwechsel und Tabulator) im
XML-Element <script> ignoriert der
Scheduler. Wenn das XML-Element
<script> nur einen leeren
Textknoten enthält, gilt das als nicht
angegebener Quell-Code.
2.0.201.5684
2008-03-14
Jobprotokolldatei wird nicht mehr
offengehalten
Wenn der JobScheduler etwas ins
Jobprotokoll schreibt, öffnet er die
Datei zuvor und schließt sie danach
wieder.
2.0.201.5679
2008-03-13
JS-150: Anpassung der Spalte
SCHEDULER_ORDER_HISTORY.E
ND_TIME in einer
Access-Datenbank
Die Datenbank-Spalte
SCHEDULER_ORDER_HISTORY.END_TI
ME muss mit JS-150 NULL
aufnehmen können. Der
JobScheduler prüft das beim Start
und ändert die Spalte. Access
verlangt dazu ein besonders
Verfahren: Der JobScheduler legt
eine Kopie der Spalte an, die er
dann in die erneuerte zurückkopiert.
Diese Operation, die einmal beim
Start des Schedulers durchgeführt
wird, sollte nicht unterbrochen
werden.
2.0.201.5678
2008-03-07
JS-150: Neue Spalten ERROR,
ERROR_CODE und ERROR_TEXT
in der Auftragsschritthistorie
Bei einem Task-Fehler werden die
neuen Felder der Tabelle
SCHEDULER_ORDER_STEP_HISTORY
gefüllt.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
277
Revision
Datum
Bemerkung
2.0.201.5671
2008-02-28
Attribut day= lässt bereits
angegebene Tage zu
In <weekdays> und <monthdays>
können Tage wiederholt angegeben
werden. Der JobScheduler mischt
die Perioden. Die Meldung
SCHEDULER-444 entfällt.
•
•
•
<weekdays> <day day="…">
<monthdays> <day day="…">
<ultimos> <day day="…">
<monthdays>
<day day="12 13">
<period
single_start="13:12"/>
</day>
<day day="12">
<period
single_start="12:00"/>
</day>
</monthdays>
Das ergibt für den 12. eines Monats
zwei Startzeiten: 12:00 und 13:12.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
278
Revision
Datum
Bemerkung
2.0.200.5665
2008-02-25
<include include_path="...">:
Umgebungsvariablen können
abgerufen werden
•
<config
include_path="$HOME/...">
JS-215: <params> mit <include>
In Dateien abgelegte Parameter
können inkludiert werden. Mit einem
XPath-Ausdruck lassen sich die <
param> adressieren.
•
<params><include>
JS-240: <include live_file="…">
•
<include live_file="…">
Das neue Attribut live_file= kann
verwendet werden direkt unter
•
•
•
•
•
•
<job><description>
<job><params>
<job><run_time>
<job> <run_time><holidays>
<holidays>
<script>
Unter <job><params> führt eine
Änderung der mit live_file=
angegebenen Datei zum Erneuten
Lesen des Jobs.
JS-222: Neuer Aufruf
job.folder_path()
•
Software- und Organisations-Service GmbH
Job.folder_path
August 2014
Änderungsprotokoll
279
Revision
Datum
Bemerkung
2.0.199.5618
2008-02-11
JS-221: Cache für zentrale
Konfiguration und parallele lokale
Konfiguration
Eine vom Supervisor geladene
zentrale Konfiguration (Seite 81)
wird im neuen Verzeichnis
./config/cache gehalten.
Der JobScheduler mischt die
zentrale mit der lokalen
Konfiguration. Ein zentral
konfiguriertes Objekt kann nicht
lokal überschrieben werden.
Unter Windows sind wegen der
weiteren Verzeichnisüberwachung
noch 25 TCP-Verbindungen
möglich.
•
2.0.198.5596
2008-02-04
JS-222: Neue Aufrufe
Spooler.configuration_directory
und Job.folder_path
•
•
Software- und Organisations-Service GmbH
<config supervisor="…">
Spooler.configuration_dir
ectory
Job.configuration_directo
ry
August 2014
Änderungsprotokoll
280
Revision
Datum
Bemerkung
2.0.197.5594
2008-02-04
JS-255: Prozessklassen auch für
Nicht-API Jobs möglich
Nicht-API Jobs können einer
Prozessklasse zugeordnet werden
(Default: die Prozessklasse mit dem
leeren Namen ""). D.h. die in der
Prozessklasse eingestellte
Begrenzung der Prozesse wirkt
auch auf Nicht-API Jobs.
Die voreingestellte Begrenzung ist
von 10 auf 30 erhöht worden.
•
•
<job process_class="…">
<process_class
max_processes="30">
JS-213: Nicht-API Jobs lassen
sich unter entferntem
JobScheduler ausführen
Für Nicht-API Jobs lässt sich eine
Prozessklasse mit entferntem
JobScheduler angeben.
•
•
•
<process>
<script language="script"
>
<process_class
remote_scheduler="…">
JS-205: Job.name liefert den Pfad
des Jobs
Job.name liefert nicht mehr den
Namen, sondern den Pfad des Jobs.
JS-204: Zentrale Konfiguration
Ein als Supervisor laufender
JobScheduler kann
Konfigurationsdateien und
-verzeichnisse einer zentralen
Konfiguration (Seite 81) für andere
JobScheduler bereitstellen.
Änderungen werden laufend
übernommen.
•
•
<config supervisor="…">
<config
central_configuration_dir
ectory="…">
•
(Seite 81)
JS-203: stdout und stderr werden
laufend ins Protokoll
übernommen
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
Revision
281
Datum
Bemerkung
Ausgaben nach stdout und stderr
werden nicht mehr erst am Ende der
Task, sondern laufend übernommen.
Das geschieht sekündlich. Wenn
keine Ausgabe kommt, verlängert
sich die Periode auf zehn Sekunden.
Bei API-Jobs, deren Tasks auf
einem entfernten JobScheduler
ablaufen ( <process_class
remote_scheduler="…"> ), werden
Ausgaben nach Beendigung des
Skripts (also kurz vor Beendigung
des Prozesses) nicht übernommen.
Datenbank Adaptive Server
Enterprise von Sybase wird
unterstützt
Für alle Datenbanken sind die
Spalten für Auftragskennungen und
Jobkettenamen von 255 auf 250
Zeichen verkürzt worden.
JS-227: Mit <run_time>
wiederholte Aufträge werden nach
Mitternacht fortgesetzt
Bislang endeten die Aufträge um
24:00. (Eine Folge von JS-123 im
Oktober 2007.)
2.0.196.5515
2008-01-14
JobScheduler für AIX
bereitgestellt
2.0.196.5515
2008-01-14
JS-219: HTML-Seiten über
virtuelles Verzeichnis eines
HTTP-Proxys möglich
2.0.196.5515
2008-01-13
JS-220: Spidermonkey 1.7
Das Modul libspidermonkey.so
bzw. spidermonkey.dll ist auf die
Version 1.7.0 umgestellt.
SpiderMonkey 1.7.0 Change Log
2.0.195.5499
2008-01-11
JS-212: Element <params> unter
<config>
Mit <params> unter <config> lassen
sich Scheduler-weite Parameter
setzen, die mit Spooler.variables
abgerufen werden können.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
282
Revision
Datum
Bemerkung
2.0.194.5488
2008-01-05
JS-150: Neue Datenbanktabelle
scheduler_order_step_history
Die Tabelle nimmt für jeden
Auftragsschritt einen Satz auf. Der
Satz wird zu Beginn des Schritts
geschrieben und am Ende
vervollständigt.
Die Tabelle
scheduler_order_history wird
jetzt schon mit dem ersten
Auftragsschritt beschrieben und
nach der Ausführung des Auftrags
vervollständigt.
Die Spalte
scheduler_order_history.end_ti
me nimmt jetzt NULL auf.
Die Tabelle
scheduler_order_step_history
hat folgenden Aufbau (Syntax für
PostgresQL):
CREATE TABLE
SCHEDULER_ORDER_STEP_HISTOR
Y
(
"HISTORY_ID" integer
not null,
//
Verweis zu
SCHEDULER_ORDER_HISTORY.HIS
TORY_ID
"STEP"
integer
not null,
// 1, 2,
3, ...
"TASK_ID"
integer
not null,
//
Verweis zu
SCHEDULER_TASKS.TASK_ID
"STATE"
varchar(100) not null,
// Auftragszustand
"START_TIME" timestamp
not null,
"END_TIME"
timestamp,
primary key(
"HISTORY_ID", "STEP" )
)
•
Software- und Organisations-Service GmbH
factory.ini (Abschnitt
[spooler], Eintrag
db_order_step_history_tab
le= …)
August 2014
Änderungsprotokoll
283
Revision
Datum
Bemerkung
2.0.194.5476
2008-01-05
Neue Datenbankspalte
scheduler_history.pid
Die neue Datenbankspalte
scheduler_history.pid nimmt die
Prozesskennung des
Betriebssystems auf.
Datenbank-Deklaration:
"PID" integer
2.0.193.5476
2008-01-02
Zentrale Konfiguration
<config
central_configuration_director
y="…">
Der Supervisor kann jetzt die lokalen
Konfigurationen mit einer zentralen
Konfiguration (Seite 81)
überschreiben.
•
•
2.0.192.5444
2007-12-21
<config supervisor="…">
<config
configuration_directory="
…">
<file_order_source> ohne regex=
konnte JobScheduler abbrechen
Bei <file_order_source> mit
leerem Attribut regex= konnte der
JobScheduler abbrechen, nachdem
ein Dateiname auf die Schwarze
Liste gesetzt worden ist (weil er
nach Auftragsführung noch
vorhanden ist). Das ist behoben.
Zwischenlösung im bisherigen
JobScheduler: regex="."
2.0.192.5442
2007-12-20
JS-178: Große Antwort einer
API-Methode ließ Task hängen
Ein Aufruf von z.B.
Spooler.execute_xml() mit einer
großen Rückgabe (etwa >100KB)
konnte hängen bleiben. Das ist
behoben.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
284
Revision
Datum
Bemerkung
2.0.192.5438
2007-12-19
Änderung einer
Job-Konfiguration unter Unix hält
Dateiaufträge nicht mehr an
Unter Unix hielt eine Änderung der
Konfiguration des ersten Jobs der
Jobkette nach <file_order_source
> die Dateiauftragsquelle an. Das ist
behoben.
<show_order>
Das Kommando <show_order>
konnte den JobScheduler
abbrechen, wenn der Auftrag nicht
mehr vorhanden war. Das ist
behoben.
JS-208: modify_job cmd='reread'
als Null-Operation wieder
eingebaut
Das Kommando ist wirkungslos, weil
die <include> ohnehin bei jedem
Job-Start erneut gelesen werden.
2.0.192.5429
2007-12-11
JS-52: XML-Fehler beim Lesen
des Auftrags-XML-Dokument
Je nach Blockung der Datenbank
konnte beim Lesen eines Auftrags
ein XML-Fehler auftreten. Das sollte
behoben sein.
2.0.192.5428
2007-12-11
JS-206: <script language="perl">
meldet Fehler mit Zeilennummer
und Pfad
Ein Fehler in einem ( <script
language="perl"> ) wird jetzt in der
Regel mit Zeilennummer und Pfad
(bei <include> ) gemeldet.
Unter Unix erscheint die Position in
der stderr-Ausgabe.
Unter Windows wird bei machen
Fehlern ("undefined value") die
Zeilennummer der ersten Zeile des
Abschnitts, aber nicht der
fehlerhaften Zeile gemeldet. Das
scheint eine Besonderheit von
ActivePerl zu sein.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
285
Revision
Datum
Bemerkung
2.0.192.5407
2007-11-30
Job.name liefert den ganzen Pfad
Job.name liefert nicht mehr den
Namen, sondern den Pfad des Jobs
ohne beginnenden Schrägstrich.
2.0.192.5402
2007-11-27
Datenbanktest auf ASCII-Zeichen
reduziert
Weil manche
PostgresQL-Installationen Latin-1
nicht unterstützen, prüft der
JobScheduler nur noch den
ASCII-Zeichenvorrat (Basic Latin).
2.0.192.5397
2007-11-20
Variablenwerte mit
Nicht-Latin1-Zeichen
Weil Umgebungsvariablen (z.B.
ERASE) Zeichen enthalten können,
die UNICODE nicht kennt, wurden
interne XML-Dokumente ungültig.
Solche Zeichen codiert der
JobScheduler jetzt hexadezimal.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
286
Revision
Datum
Bemerkung
2.0.192.5394
2007-11-18
PostgresQL wird besser
unterstützt, JobScheduler prüft
Datenbank
Beim Start führt der JobScheduler
einfache Tests des
Datenbankmoduls durch:
•
•
•
ob '\' (Backslash) korrekt
behandelt wird,
ob der Latin1-Zeichenvorrat
und die Steuerzeichen TB
(0x08), CR (0x0D) und NL
(0x0A) geschrieben und
gelesen werden können, und
ob die SQL-Anweisung
rollback auf die Tabelle
SCHEDULER_VARIABLES wirkt.
Bei einem Fehlschlag startet der
JobScheduler nicht.
[
E
R
R
O
R
]
SCHE
DULE
R-45
1
Database check failed,
database is not useable.
error
[
E
R
R
O
R
]
SCHE
DULE
R-45
2
Database does not
correctly store test
values: (written value)
(read value)
[
E
R
R
O
R
]
SCHE
DULE
R-45
3
Database does not
respect rollback
command
Entfernte Task-Ausführung:
Spooler.directory, .log_dir,
.ini_path und .include_path liefern
Werte des entfernten Schedulers
•
•
•
•
Software- und Organisations-Service GmbH
Spooler.directory
Spooler.log_dir
Spooler.ini_path
Spooler.include_path
August 2014
Änderungsprotokoll
Revision
287
Datum
Bemerkung
JS-195: Job-Historie für Jobs in
Ordnern korrigiert
<show_job what="task_history">
berücksichtigt jetzt den ganzen Pfad
des Jobs.
JS-196: Einträge in der factory.ini
auch für Jobs in Ordnern möglich
•
factory.ini (Abschnitt [job]
)
2.0.191.5386
2007-11-15
Löschen der Jobkette, auf die
eine übergeordnete verweist,
liefert keine Warnung mehr
Wenn eine Jobkette gelöscht wird,
auf die eine übergeordnete Jobkette
verweist, wird letztere unbrauchbar,
weshalb die Warnung
SCHEDULER-424 'Job_chain xxx'
is being removed before 'yyy'
ausgegeben wurde. Die Meldung
wird jetzt als Info ausgegeben.
JS-180: Java-Quellcode kann jetzt
mit Blank im Classpath übersetzt
werden
Der JobScheduler setzt dazu die
Umgebungsvariable CLASSPATH.
JS-146: Jobstarts bei neuen,
geänderten und gelöschen
Konfigurationsdateien
•
•
•
Software- und Organisations-Service GmbH
<config
configuration_add_event="
…">
<config
configuration_modify_even
t="…">
<config
configuration_delete_even
t="…">
August 2014
Änderungsprotokoll
288
Revision
Datum
Bemerkung
2.0.190.5382
2007-11-12
JS-181: Änderung der
Großschreibung einer im
Quellcode angegebenen
Java-Klasse
Unter Windows führte die Änderung
der Großschreibung des Namens
einer Java-Klasse zu einem Fehler,
wenn deren Quell-Code direkt in <
script language="java">
angegeben war. Der JobScheduler
löscht jetzt die generierte .java
-Datei, um Windows zu der
geänderten Großschreibungsweise
zu zwingen.
2.0.190.5379
2007-11-06
Veraltetes <script
process_class="..."> wird nicht
mehr unterstützt
Verwenden Sie <job
process_class="…"> .
2.0.190.5375
2007-11-03
JS-177: Java-Methode
Order.priority() korrigiert
Order.priority ist jetzt unter Java
benutzbar.
2.0.190.5370
2007-10-29
JS-155: Lade- und
Aktivierungsphase der
dynamischen Konfiguration
getrennt
Die Objekte der
Konfigurationsverzeichnisse werden
erst geladen, dann aktiviert. Damit
können für <config
configuration_add_event="…">
usw. Jobs aus den
Konfigurationsverzeichnissen
benutzt werden.
JS-155: Kurzfristiges Löschen
und Wiedereinfügen einer Datei
wird als Änderung angesehen
Wenn eine Datei in sehr kurzer Zeit
gelöscht und wieder eingefügt wird,
interpretiert der JobScheduler das
als Änderung, nicht als Löschen und
Hinzufügen eines Objekts.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
289
Revision
Datum
Bemerkung
2.0.190.5365
2007-10-28
JS-136: Authentifizierung für
SMTP-Server (eMail-Versand)
Der JobScheduler unterstützt
Authentifizierung für den Versand
von Mail via SMTP.
Der JobScheduler läuft nur mit der
neuen Datei sos.mail.jar!
•
factory.ini (Abschnitt
[smtp])
JS-153: Neues Kommando <
check_folders>
Das Kommando veranlasst den
JobScheduler, den Inhalt von
Konfigurationsverzeichnissen (Hot
Folders) zu prüfen, um geänderte,
hinzugefügte oder entfernte Dateien
sofort zu erkennen. Unter Windows
wird dies sofort erkannt, unter Unix
wird dies innerhalb von max. 60s
erkannt. Das Kommando ist in der
HTML-Oberfläche des
JobSchedulers verfügbar.
•
<check_folders>
JS-149: Neues Attribut <
job_chain_node
on_error="setback|suspend"
•
2.0.189.5354
2007-10-22
<job_chain_node
on_error="…">
JS-147: Umgebungsvariablen für
Tasks einstellbar
•
•
<job><environment>
<start_job><environment>
JS-148: Task- und
Auftrags-Parameter für
Nicht-API-Jobs
Nicht-API-Jobs erhalten die Taskund Auftrags-Parameter als
Umgebungsvariablen. Die Namen
sind großgeschrieben. "
SCHEDULER_PARAM_" ist den Namen
vorangestellt. Auftragsparameter
überschreiben gleichnamige
Task-Parameter.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
290
Revision
Datum
Bemerkung
2.0.187.5325
2007-10-10
JS-134: Mehrere JobScheduler
Skripte
Mit dem neuen XML-Element <
scheduler_script> lassen sich
mehrere JobScheduler Skripte
angegeben.
JS-68: Mehrere Job-Monitor <
monitor>
•
<monitor>
JS-121: Monate in <run_time>
•
<month>
JS-123: absolute_repeat= in <
run_time>
•
<period>
JS-124: Mehrfache angaben in
day=, monthday= usw.
•
<day>
Neue Voreinstellung <add_order
replace='yes'>
•
<add_order replace="yes">
: replace="yes" ist jetzt
voreingestellt.
JS-155: Dynamische
Konfiguration
•
(Seite 78)
JS-126: HTTP-Authentifizierung
wird auch für Web-Services
verlangt
Die Authentifizierung <
http.authentication> gilt auch für
die über HTTP angesprochenen <
web_service> .
JS-129: Datenbankspalte
EXIT_CODE wird nachträglich
angelegt
JS-116: <run_time> für Aufträge in
verschachtelter Job-Kette
<run_time> wiederholt jetzt einen
Auftrag korrekt, auch wenn er in
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
Revision
291
Datum
Bemerkung
einer verschachtelten Job-Kette ( <
job_chain_node.job_chain> ) ist.
2.0.186.5189
2007-08-30
JS-110: Korrektur "bad allocation"
2.0.186.5179
2007-08-27
JS-103: HTTP-Authentifizierung
eingeführt
Neues XML-Element <
http.authentication> eingeführt.
(Dank für den Algorithmus an
Michael Collard, iinet.net.au).
Meldung für verspäteten
Herzschlag wird als Warnung
ausgegeben
•
•
•
Software- und Organisations-Service GmbH
[
w
a
r
n
]
SCH
EDU
LER
-82
7
Own heart beat is
late:
next_heart_beat has
been announced for
(this is seconds late)
[
E
R
R
O
R
]
SCH
EDU
LER
-38
6
Last heart beat was
time, seconds ago.
Something is
delaying
JobScheduler
execution, the
JobScheduler is
aborted immediately
[
E
R
R
O
R
]
SCH
EDU
LER
-37
7
After own late heart
beat, JobScheduler
member '' has taken
exclusiveness
August 2014
Änderungsprotokoll
292
Revision
Datum
Bemerkung
2.0.185.5170
2007-08-24
Änderungen an der Datenbank
•
Mit der Tabelle
SCHEDULER_ORDER_HISTORY
wird der neue Index
SCHEDULER_O_HISTORY_JOB_C
HAIN auf die Spalte JOB_CHAIN
•
angelegt.
Der bisherige Index
SCHEDULER_HISTORY_CLUSTME
MBER wird jetzt als
SCHEDULER_H_CLUSTER_MEMBE
R angelegt.
•
Die Datenbankspalte
SCHEDULER_ORDERS.SPOOLER_
ID wird jetzt mit not null
•
Software- und Organisations-Service GmbH
angelegt.
Für MySQL werden die
Primärschlüsselfelder von
SCHEDULER_ORDERS mit dem
Zeichensatz Latin1 angelegt.
August 2014
Änderungsprotokoll
293
Revision
Datum
Bemerkung
2.0.184.5167
2007-08-23
JS-92: idle_time="5" ist jetzt
voreingestellt
•
<job idle_timeout="never"
>
JS-88: Neues Attribut
max_order_history
•
•
•
<show_state
max_order_history="…">
<show_job_chains
max_order_history="…">
<show_job_chain
max_order_history="…">
JS-97: Meldungen wegen später
gelöschter Dateien jetzt als
debug3
Zwei Meldung werden mit debug3
statt bisher info ausgegeben:
•
•
[
d
e
b
u
g
3
]
SCH
EDU
LER
-87
6
Temporary files
cannot be deleted.
Still trying ..., paths
[
d
e
b
u
g
3
]
SCH
EDU
LER
-87
7
Temporary files have
been deleted now
JS-96: HTML-codierte Protokolle
über HTTP enthalten wieder die
Zeichen <, > und &
JS-93: Meldung SCHEDULER-846
korrigiert
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
Revision
294
Datum
Bemerkung
•
Software- und Organisations-Service GmbH
S
C
H
E
D
U
L
E
R
8
4
6
Afte
r
task
exc
epti
on
and
due
to
stop
_on
_err
or='
no',
the
orde
r
has
bee
n
mov
ed
to
erro
r_st
ate=
''
August 2014
Änderungsprotokoll
295
Revision
Datum
Bemerkung
2.0.183.5153
2007-08-10
JS-48: Nicht-API-Jobs versetzen
im Fehlerfall Auftrag in den
Fehlerzustand
Im Fehlerfall eines
auftragsgesteuerten Nicht-API-Jobs
( <process> oder <script
language="shell"> ) wird der
ausgeführte Auftrag in den
Fehlerzustand ( <job_chain_node
error_state="…"> ) versetzt.
Davon unberührt stoppt der Job
(außer bei <job
stop_on_error="no"> oder <
delay_after_error> ).
JS-82: Unix: Viele <
start_when_directory_changed>
blockieren nicht mehr den
Scheduler
Unter Unix konnten viele
Verzeichnisüberwachungen mit <
start_when_directory_changed>
den JobScheduler so beschäftigen,
dass die Tasks nicht mehr
fortgesetzt wurden. Das ist behoben.
JS-81: Date-Header fehlte beim
Erzeugen der eMail mit JavaMail
ohne Versand
EMails, die der JobScheduler mit
JavaMail erzeugt und im
Mail-Verzeichnis abgelegt, also nicht
versendet hat, haben jetzt auch
einen Date-Header.
2.0.182.5146
2007-07-27
JS-78: Scheduler-Skript wird vor <
commands> ausgeführt
Erst wird das Scheduler-Skript <
config><script> ausgeführt, dann
<config><commands> . Damit kann
<run_time
start_time_function="…">
berechnet werden, bevor die
Aufträge in der Datenbank abgelegt
werden.
JS-78: Verteilte Aufträge mit <
run_time> möglich
Verteilte Aufträge können <run_time
> nutzen.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
296
Revision
Datum
Bemerkung
2.0.181.5143
2007-07-24
JS-49: Für die Datenbank DB2
wird der Datentyp numeric(1) statt
bisher boolean verwendet
JS-55: <job tasks='0'> startet
keine Task mehr
Auch im Zustand pending prüft der
JobScheduler das Attribut <job
tasks="…"> Bei tasks="0" startet
er keine Task.
2.0.180.5139
2007-07-23
JS-39: scheduler.log.gz wird nicht
mehr erzeugt
Solange nicht implementiert ist, dass
der JobScheduler die
scheduler.log.gz im Hintergrund
erzeugt, erzeugt er sie erstmal gar
nicht, weil das den Start zu lange
verzögern kann.
JS-41: Urls im
HTML-Protokollfenster sind
klickbar
Urls in einem über HTTP in HTML
gelieferten Protokoll sind klickbar.
Der JobScheduler erkennt das
Kennzeichen http:// und setzt den
Url in ein <a href="…"
target="_blank">...</a>
2.0.179.5136
2007-07-23
JS-52: Nicht für XML zugelassene
Zeichen werden durch ¿ ersetzt
Die Zeichen U-0 bis U-1F (außer
U-9, U-A, U-D) und U-80 bis U-9F
ersetzt der JobScheduler beim
Erzeugen eines XML-Dokuments
durch ¿, damit es nicht ungültig wird.
Alle anderen Zeichen des
Zeichenvorrats Latin1 (ISO-8859-1)
werden weiter unterstützt.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
297
Revision
Datum
Bemerkung
2.0.178.5132
2007-07-17
JS-42: Prozess-Jobs setzen
Job.state_text und
Order.state_text
Der JobScheduler füllt nach
Beendigung eines Prozess-Jobs ( <
process> und <script
language="shell"> , also nicht
API-Jobs) Job.state_text und
Order.state_text mit der ersten
Zeile von stdout, max. 100 Zeichen.
Datenbank-Indices werden
automatisch angelegt
Der JobScheduler legt jetzt
zusammen mit den
Datenbanktabellen auch die Indices
an.
Create-tables in die
Dokumentation aufgenommen
•
»Vom JobScheduler
verwendete
SQL-Anweisungen« (Seite 348)
Umgang mit Backslash in MySQL
Beim Betrieb mit einer
MySQL-Datenbank berücksichtigt
der JobScheduler die Besonderheit
der Backslashs in MySQL-Strings.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
298
Revision
Datum
Bemerkung
2.0.177.5128
2007-07-13
JS-23: Tasks warten auf gesperrte
temporäre Dateien für stdout und
stderr
Nur Windows: Der JobScheduler
verzögert das Ende einer Task eine
halbe Sekunde, bis die für stdin,
stdout und stderr angelegten
temporären Dateien löschbar sind.
Die Dateien können von
Enkelprozessen blockiert sein, die
der Task-Prozess gestartet hat und
die nach Task-Ende noch
weiterlaufen. Oder ein Virenscanner
hält die Dateien noch einen kurzen
Moment fest.
JS-47: <security> in <base>
nutzbar
<security> in oberer Konfiguration
ersetzt nicht mehr die Einstellung
aus der <base> -Konfiguration
sondern wird mit dieser vermengt.
abort_immediately_and_restart
zögert 2 Sekunden
<modify_spooler
cmd="abort_immediately_and_res
tart"> schließt wie bisher die
TCP-Verbindungen und wartet dann
2 Sekunden, um dem Internet
Explorer die Gelegenheit zu geben,
seinerseits die TCP-Verbindung zu
schließen, um nicht zu blockieren.
distributed='no',
Cluster-Member-ID ist nur noch
für Rechnername und Port
eindeutig
Ein Verteilter JobScheduler (
-distributed-orders ) führt Jobs
lokal im einzelnen JobScheduler
aus.
Für eine Job-Kette kann mit <
job_chain distributed="…">
eingestellt werden, ob sie lokal im
einzelnen JobScheduler oder verteilt
im ganzen Cluster gilt. Lokale
Job-Ketten müssen im Cluster einen
eindeutigen Namen haben (das wird
nicht geprüft).
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
Revision
299
Datum
Bemerkung
Bisher war die Cluster-Member-ID
für jeden Lauf eines Schedulers
(eines Cluster-Mitglieds) eindeutig.
Jetzt wird die ID aus Scheduler-ID,
Rechnernamen und
TCP-Portnummer gebildet. Zwei
Rechner im selben Cluster dürfen
nicht denselben Rechnernamen
haben.
2.0.176.5116
2007-07-01
Linux-Scheduler wird unter Suse
9.1 kompiliert
Die ausgelieferten Binär-Dateien
laufen jetzt unter Suse ab Version
9.1 (bisher 8.0). Bisher ist die
Linux-Software unter Suse 8.0
kompiliert worden.
orders_recoverable='no'
unterdrückt nicht mehr
Auftragshistorie
<job_chain
orders_recoverable="no"> .
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
300
Revision
Datum
Bemerkung
2.0.176.5105
2007-06-21
Zur Laufzeit hinzugefügtes <
file_order_source> wirkt
Eine zur Laufzeit hinzugefügte <
job_chain> mit <
file_order_source> hat nicht
automatisch gestartet. Das ist
behoben.
need_db=no nicht länger im
Cluster-Betrieb erlaubt
•
•
•
•
2.0.176.5101
2007-06-18
factory.ini (Abschnitt
[spooler], Eintrag need_db=
…)
-exclusive
-distributed-orders
S
C
H
E
D
U
L
E
R
3
5
7
This
is a
me
mbe
r of
a
clust
er
(opti
on
-exc
lusiv
e or
-dist
ribut
ed-o
rder
s),
and
ther
efor
e
nee
ds a
data
bas
e
-distributed-orders und
Order.setback()
Ein verteilter Auftrag mit Startzeit
(z.B. durch Order.setback() )
konnte nach Neustart den
JobScheduler in eine Schleife
bringen. Das ist behoben.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
301
Revision
Datum
Bemerkung
2.0.176.5087
2007-06-06
Aufträgskennungen werden in
allen verschachtelten Job-Ketten
auf Eindeutigkeit geprüft
•
<job_chain_node.job_chain
>
Miteinander durch Verschachtelung
verbundene Job-Ketten bilden einen
gemeinsamen Order_id_space, um
beim Einfügen eines Auftrags die
Eindeutigkeit der Auftragskennung
sicherstellen zu können.
Der JobScheduler lehnt das
Einfügen eines Auftrags in eine
Job-Kette ab, wenn die
Auftragskennung im Order_id_space
bereits vergeben ist.
Beim Ersetzen eines Auftrags wird
auch ein Auftrag in einer anderen
Job-Kette, die demselben
Order_id_space angehört, ersetzt.
Software- und Organisations-Service GmbH
[
E
R
R
O
R
]
SCHE
DULE
R-42
6
'job_chain' and
'job_chain' cannot be
combined, because of
duplicate order id ''
[
i
n
f
o
]
SCHE
DULE
R-87
2
New 'Job_chain' shares
order IDs with
job_chains
[
i
n
f
o
]
SCHE
DULE
R-87
3
Job_chains job_chains
share order IDs because
'Job_chain' has been
removed
[
i
n
f
o
]
SCHE
DULE
R-87
4
Order_id_space has
been closed
August 2014
Änderungsprotokoll
Revision
302
Datum
Bemerkung
[
i
n
f
o
]
SCHE
DULE
R-87
5
Order_id_space has
been closed because
'job_chain' has been
removed
-send-cmd= berücksichtigt
-ip-address=
-send-cmd berücksichtigt <config
ip_address="…"> .
2.0.175.5045
2007-05-09
MySQL-Tabellen werden für
InnoDB angelegt
Wenn der JobScheduler eine
SQL-Tabelle in einer
MySQL-Datenbank automatisch
anlegt, verwendet er jetzt den
transaktions-sicheren Typ InnoDB.
Der JobScheduler läuft nur korrekt
mit transaktions-gesicherten
Datenbanken.
<add_order at='...'>
Die mit dem Auftrag übergebene
Startzeit <add_order at="…"> wird
nicht mehr durch <add_order><
run_time> überschrieben.
Neue Eigenschaft Order.log
•
Order.log liefert das
Auftragsprotokoll.
Neue Klasse Supervisor_client
•
•
Spooler.supervisor_client
Supervisor_client
XML-Kommandos und API für
Prozessklassen
•
•
•
•
•
•
Software- und Organisations-Service GmbH
Spooler.process_classes
Process_classes
Process_class
Job.process_class
<process_class>
<process_class.remove>
August 2014
Änderungsprotokoll
303
Revision
Datum
Bemerkung
2.0.174.5001
2007-04-27
API für Sperren
•
•
•
2.0.172.4983
2007-04-16
Spooler.locks
Locks
Lock
Verschachtelte Job-Ketten
Ein Auftrag kann nacheinander
durch mehrere Job-Ketten
geschleust werden. Diese
Job-Ketten werden in einer eigenen,
übergeordneten Job-Kette
aufgeführt.
•
2.0.171.4981
2007-04-16
<job_chain_node.job_chain
>
Mehrere Sperren und <
lock.remove>
Ein Job kann mehrere Sperren
setzen und Sperren können gelöscht
werden.
•
•
2.0.171.4961
2007-04-09
<lock.remove>
<job> <lock.use>
Job-Kette und Job-Kettenknoten
stoppen
Eine Job-Kette kann gestoppt
werden, so dass keine Aufträge
mehr ausgeführt werden.
Ein Job-Kettenknoten kann gestoppt
werden, so dass Aufträge nicht mehr
ausgeführt werden. Oder die
Aufträge überspringen den
Job-Kettenknoten.
•
•
•
2.0.170.4951
2007-04-03
<job_chain.modify>
<job_chain_node.modify>
Job_chain_node.action
<show_calendar>
Ein neues Kommando liefert die
Startzeiten der Jobs und Aufträge.
•
2.0.169.4940
2007-04-01
<show_calendar>
Sperren
Mit Sperren kann der Ablauf von
Tasks serialisiert werden, siehe
Kapitel (Seite 152).
•
•
Software- und Organisations-Service GmbH
<lock>
<job> <lock.use>
August 2014
Änderungsprotokoll
304
Revision
Datum
Bemerkung
2.0.168.4912
2007-03-19
Ausführung von Tasks auf
entferntem Scheduler
•
2.0.167.4877
2007-03-08
<process_class
remote_scheduler="…">
Auftragsprokolle wurden nicht
immer in die Historie
aufgenommen
Ein Fehler seit 15. Februar, ist
behoben.
2.0.167.4861
2007-02-22
XML-Kommando <modify_order>
erweitert
•
•
Software- und Organisations-Service GmbH
<modify_order> kann jetzt
auch Parameter, Xml_payload
und Titel ändern.
<xml_payload> darf jetzt leer
sein.
August 2014
Änderungsprotokoll
305
Revision
Datum
Bemerkung
2.0.166.4860
2007-02-19
XML-Element <web_services>
heißt jetzt <http_server>
•
•
<http_server>
[
i
n
f
o
]
SCH
EDU
LER
-84
7
Please use new
name '' instead of
old ''
mail_on_delay_after_error wirkt
nur noch mit <delay_after_error>
factory.ini (Abschnitt [job],
Eintrag
mail_on_delay_after_error= …)
wirkt nur, wenn für den Job auch ein
<delay_after_error> gesetzt ist.
Meldung SCHEDULER-949
•
[
i
n
f
o
]
SCH
EDU
LER
-94
9
Job will be executed
when a process of
process class ''
becomes available
Die Meldung erscheint jetzt im
Jobprotokoll und, wenn eine Task
gestartet werden soll, mit der
Task-Id.
<script> und <base>
Das Element <script> , in einer <
base> -Konfiguration definiert, wird
jetzt von der übergeordneten
Konfiguration nicht mehr ersetzt,
sondern erweitert. (Das funktioniert
nicht mit Java wegen dessen
Syntax.) Damit können in der <base
> -Konfiguration Funktionen definiert
werden, die in einer übergeordneten
Konfiguration nutzbar sind.
Auftragsprokolle bei
Scheduler-Neustart
l Die Protokolle nicht
abgeschlossener Aufträge bleiben
jetzt bei Scheuler-Neustart erhalten
und werden fortgeschrieben. Dazu
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
Revision
306
Datum
Bemerkung
werden sie in der Datenbank
gespeichert.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
307
Revision
Datum
Bemerkung
2.0.165.4846
2007-02-12
Order.state
Wenn Order.state der bisherige
Wert zugewiesen wird, der Zustand
also nicht verändet wird, verhindert
das wie jeder andere Wert die
automatische Weiterschaltung in
den Folgezustand nach
spooler_process() . Stattdessen
durchläuft der Auftrag denselben
Job noch einmal.
HTTP-Server mit
Alias-Verzeichnissen
•
<http_server><
http_directory>
Verzögernde Job-Kettenknoten
•
<job_chain_node delay="…"
>
<show_order> kann
Historien-Einträge zum selben
Auftrag unterscheiden
•
<show_order
history_id="…">
Damit kann die HTML-Oberfläche
das richtige Protokoll zeigen, wenn
ein Auftrag mehreren
Historieneinträge hat.
Das Kommando liefert jetzt auch die
neuen Attribute start_time= (erste
Ausführung) und end_time=
(Abschluss des Auftrags). Die
integrierte HTML-Oberfläche (
http://host:4444/z) zeigt den
Zeitpunkt der Abschlusses.
HTML-Oberfläche zeigt Zeiten
genauer
Die integrierte HTML-Oberfläche (
http://host:4444/z) zeigt
Sekundenzeiten bis 99s und darüber
hinaus Viertelbruchteile.
<job stop_on_error='no'> versetzt
nach Exception Auftrag in
Fehlerzustand
<job stop_on_error="no">
versetzt nach einem Abbruch der
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
Revision
308
Datum
Bemerkung
Task mit Exception den Auftrag in
den Fehlerzustand ( <
job_chain_node error_state="…"
> ).
Dokumentation geändert:
stop_on_error="no" gilt auch für
Task-Abbruch mit Exception.
2.0.163.4829
2007-02-01
Address-in-use-Problem unter
Windows gelöst
Enkel-Prozesse, die der
JobScheduler nicht kennt und also
nicht abbrechen kann, blockierten
bislang die Scheduler-Ports. Jetzt
sind diese nicht mehr vererbbar und
können von den Enkeln auch nicht
mehr blockiert werden.
Die temporären Dateien für stdout
und stderr bleiben dagegen unter
Windows in einem solchen Fall
stehen.
Temporäre Dateien bleiben
stehen, wenn Enkel-Prozesse
noch laufen
Windows: Enkel-Prozesse, die der
JobScheduler nicht kennt und also
nicht abbrechen kann, blockieren die
temporären Dateien für stdout und
stderr und können deshalb vom
JobScheduler nicht gelöscht
werden.
2.0.163.4810
2007-01-30
<file_order_sink move_to=""
akzeptiert Umgebungsvariablen
•
2.0.163.4793
2007-01-27
<file_order_sink
move_to="…">
Skript-Funktion für nächste
Startzeit
Mit <run_time
start_time_function="…"> kann
eine Funktion aus dem
Scheduler-Skript angegeben
werden, die die nächste Startzeit
liefert.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
309
Revision
Datum
Bemerkung
2.0.163.4792
2007-01-25
Wochentag im Monat: <
monthdays><weekday>
<run_time> ist erweitert: Mit <
weekday day="…"> können
bestimmte Wochentage im Monat
ausgewählt werden.
Mit <run_time
start_time_function="…"> kann
eine Funktion aus dem
Scheduler-Skript angegeben
werden, die die nächste Startzeit
liefert.
Solaris: Neue Module
libstdc++.so.6.0.8 und
libgcc_s.so.1
Weil der JobScheduler für Solaris
jetzt mit gcc 4.1.1 übersetzt wird,
werden die neuen Module
libstdc++.so.6.0.8 und libgcc_s.so.1
benötigt. Ein symbolischer Link
muss eingerichtet werden:
ln -s libstdc++.so.6.0.8
libstd++.so.6
2.0.163.4781
2007-01-22
Order.params initialisiert sich
automatisch
Order.params initialisiert sich beim
ersten Zugriff automatisch mit einer
Variable_set .
Spooler.terminate() mit
Parametern für Cluster-Betrieb
•
Spooler.terminate()
Jobs ohne <run_time>
berücksichtigen jetzt die <
holidays>
•
<holidays>
Verwaltung der Feiertage in
externer Datei: <holidays> mit <
include>
•
Software- und Organisations-Service GmbH
<holidays><include>
August 2014
Änderungsprotokoll
310
Revision
Datum
Bemerkung
2.0.163.4758
2007-01-19
Cluster: Fristen zur Überwachung
des Herzschlags sind einstellbar
•
<cluster>
<file_order_source> lässt
Umgebungsvariablen zu
•
<file_order_source
directory="…">
Neue Einstellung
mail_on_delay_after_error
•
•
factory.ini (Abschnitt
[spooler], Eintrag
mail_on_delay_after_error
= …)
factory.ini (Abschnitt [job],
Eintrag
mail_on_delay_after_error
= …)
Optionen -?, -h und -V
•
•
•
-? zeigt die möglichen
Optionen
-h zeigt ebenfalls möglichen
Optionen
-V zeigt die Versionsnummer.
Wenn keine anderen Optionen
angegeben sind, beendet sich der
JobScheduler sofort.
Speicherleck in Java geschlossen
Ein winziges, aber stetiges
Speicherleck ist abgedichtet.
Insbesondere bei jeder
Datenbankoperation (über JDBC)
blieben einige Bytes übrig.
Speicherleck bei
stdout/stderr-Dateien
geschlossen
Unter Unix wurden temporäre
Dateien nicht korrekt geschlossen,
wenn eine Task etwas nach stdout
oder stderr geschrieben hat. Das ist
behoben.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
311
Revision
Datum
Bemerkung
2.0.162.4730
2007-01-12
Cluster: Backup-Scheduler und
verteilte Aufträge (noch nicht für
Produktion)
•
•
•
•
•
•
•
•
•
•
•
(Seite 138)
-exclusive
-backup
-backup-precedence
-install-service
-distributed-orders
<terminate restart="…">
<terminate timeout="…">
<terminate
continue_exclusive_operat
ion="…">
<terminate
all_schedulers="…">
<job_chain
distributed="yes">
debug9 protokolliert
SQL-Kommandos
Bei -log-level =debug9 schreibt
der JobScheduler seine
SQL-Kommandos ins
Hauptprotokoll.
Order.xml_payload akzeptiert
ISO-8859-1
Order.xml_payload akzeptiert jetzt
den Zeichensatz ISO-8859-1 auch
im Datenbankbetrieb.
setback() funktioniert korrekt
Korrektur der fehlerhaften Version
2.0.160.4598 2006-11-22.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
312
Revision
Datum
Bemerkung
2.0.161.4619
2006-12-04
<config ip_address="...">
Die IP-Adresse für TCP und UDP
kann angegeben werden.
•
•
-ip-address
<config ip_address="…">
Wartende Aufträge fortsetzen>
<modify_order at="now"> setzt
einen wegen Order.run_time oder
Order.setback() wartenden
Auftrag fort.
Order.suspend()
Aufträge können angehalten
werden.
•
•
Order.suspended
<modify_order
suspended="…">
<copy_params from="order">
<copy_params from="order">
akzeptiert jetzt auch Aufträge ohne
Parameter.
2.0.160.4598
2006-11-22
Order.setback()
Order.setback() bricht in dieser
Version den JobScheduler ab
(korrigiert in 2.0.162.4705 von
2007-01-05).
<show_order what="log">
Das Kommando liefert jetzt auch
das Protokoll ausgeführten Auftrags
aus der Auftragshistorie.
•
<show_order what="log">
Order.state und Order.run_time
Eine Änderung des Zustands eines
Auftrags ( Order.state ) führt nicht
mehr zur sofortigen Ausführung
desselben, wenn seine
Order.run_time eine spätere
Startzeit vorschreibt.
•
•
•
•
Software- und Organisations-Service GmbH
Order.state
Order.run_time
<modify_order state="…">
<modify_order><run_time>
August 2014
Änderungsprotokoll
313
Revision
Datum
Bemerkung
2.0.160.4592
2006-10-06
<show_state what="job_params">
Die XML-Kommandos können jetzt
die <params> eines <job> liefern.
•
2.0.160.4591
2006-10-03
<show_state
what="job_params">
Auftrag ohne Parameter in der
Datenbank ließ JobScheduler
abbrechen
Der Fehler ist mit den
Dateiaufträgen (Version
2.0.158.4484 2006-09-13) in den
JobScheduler gelangt und jetzt
behoben.
Scheduler braucht seit 26.
September 2006 eine aktuelle
sos.mail.jar
Die Datei sos.mail.jar sollte nicht
älter als Version 1.6.131.4555
(Dateidatum 2006-09-25 09:00)
sein.
2.0.160.4586
2006-10-30
<modify_order><run_time>
Die <run_time> eines Auftrags kann
für den nächsten Durchlauf neu
gesetzt werden.
•
•
<modify_order><run_time>
Order.run_time
<job replace="yes">
Ein Job kann ersetzt werden.
•
•
Software- und Organisations-Service GmbH
<job replace="yes">
<add_jobs>
August 2014
Änderungsprotokoll
314
Revision
Datum
Bemerkung
2.0.159.4578
2006-10-16
Variablenersetzung verfeinert
Alleinstehende $ bleiben stehen.
Das Zeichen wird nur dann ersetzt,
wenn ein Buchstabe oder ein
Unterstrich folgt. Damit kann ein
Dollarzeichen in Windows-Freigaben
("\\HOST\C$") und vielen
Regulären Ausdrücken (".txt$",
"[a-z$]", aber nicht "[$a-z]")
verwendet werden.
•
Kapitel (Seite 95)
<modify_order setback="no"
state="…">
•
•
2.0.158.4569
2006-10-11
<modify_order
setback="no">
<modify_order state="…">
<show_order what='payload'/>
<show_order what="payload">
liefert die Parameter des Auftrags.
Protokolldateien werden früher
gelöscht
Der neue JobScheduler entfernt die
Protokolldateien früher, auch wenn
das entsprechende Objekt (in der
Regel ein Order ) noch gehalten
wird.
Mit einem Javascript-Job konnte
folgendes passieren: Wenn dieselbe
Task nacheinander zwei Aufträge mit
derselben Id bekam, hielt sie wegen
des noch nicht angelaufenen
Garbage Collectors die zwei
Aufträge offen. Erst beim Beenden
der Task wurden die zwei
Auftragsobjekte geschlossen, also
die Destruktoren gerufen, die die
Protokolldateien löschten. Das
führte zu einem Fehler, weil beide
Protokolldateien wegen derselben
Auftragskennung dieselben
Dateinamen haben.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
315
Revision
Datum
Bemerkung
2.0.158.4559
2006-10-04
Änderungen in den
Dokumentationsdateien
•
Die Datei
ersetzung_von_umgebungsva
riablen.xml ist ersetzt
worden durch
variable_substitution.xml
•
(Seite 95). Die Seite enthält
ein Verzeichnis aller Attribute
und .ini-Einstellungen, in
denen Umgebungsvariablen
verwendet werden können.
Das generierte Register steht
jetzt in register_data.xml.
Die Datei register.xml
enthält jetzt einen Text.
Beim Beenden des Schedulers
werden <process>-Prozesse
abgewartet
Bei <terminate> wartete der
JobScheduler das Ende von <
process> -Tasks nicht ab. Jetzt tut
er das.
Variable_set.substitute
Neue Methode zum Ersetzen von
$-Variablen in einem String.
•
Variable_set.substitute()
Subprocess.env
Die Umgebungsvariablen des zu
startenden Subprozesses werden in
einem Variable_set gehalten.
Damit kann die neue Methode
Variable_set.substitute()
genutzt werden.
Der Subprozess erbt die
Umgebungsvariablen vom laufenden
Prozess zum Zeitpunkt des Aufrufs
von Task.create_subprocess() .
•
Software- und Organisations-Service GmbH
Subprocess.env
August 2014
Änderungsprotokoll
316
Revision
Datum
Bemerkung
2.0.158.4555
2006-09-26
Umgebungsvariablen in <
add_order><params> und <
start_job><params>
Innerhalb von <add_order> und <
start_job> können in in <param
value="…"> Umgebungsvariablen
abgerufen (Seite 95) werden.
2.0.158.4551
2006-09-24
add_pid() für Prozessgruppe
Task.add_pid() akzeptiert die Pid
auch negativ, um eine
Prozessgruppe zu bezeichnen.
Unter Unix wird dann bei einem
kill die Prozessgruppe
abgebrochen. Unter Windows hat
eine negative Pid zurzeit keine
besondere Wirkung.
Mehrere <commands> aus
Basiskonfigurationen werden
zusammengefügt
Alle <commands> aus der
Konfiguration mit den <base>
-Konfigurationen werden ausgeführt,
<base> zuerst.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
317
Revision
Datum
Bemerkung
2.0.158.4533
2006-09-20
Tabellenspalten werden
verbreitert
Der JobScheduler prüft beim Start
die Spaltenbreiten von
scheduler_orders.id und
scheduler_order_history.order_
id und erweitert sie ggfs. auf 255
Zeichen, damit die
Auftragskennungen der
Dateiaufträge Platz finden. Ein
Fehler dabei wird ignoriert.
Dateiaufträge mit zu langen
Pfaden
Mit den neuen
Datenbankspaltenbreiten verarbeitet
der JobScheduler Pfade bis 255
Zeichen Länge. Längere Pfade
werden mit Warnung ignoriert. Der
JobScheduler merkt sie sich, um die
Fehlermeldung nicht zu
wiederholen.
Mail-Versand nur in
Dateiverzeichnis
Die neue Einstellung verhindert den
Versand und stellt die Nachricht in
das mit sos.ini (Abschnitt [mail],
Eintrag queue_dir= …) eingestellte
Verzeichnis.
Ebenso queue_only in der Datei
sos.ini.
•
•
sos.ini (Abschnitt [mail],
Eintrag queue_only= …)
factory.ini (Abschnitt
[spooler], Eintrag
mail_queue_only= …)
start_when_directory_changed
robuster gemacht
Die
Windows-Verzeichnisüberwachung
wird bei jedem Aufruf (bei <
start_when_directory_changed>
am Ende der Task) erneuert, ohne
das ein Signal verloren geht.
Wenn unter Unix ein Regulärer
Ausdruck angegeben ist, startet
start_when_directory_changed
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
Revision
318
Datum
Bemerkung
den Job nur noch, wenn eine Datei
hinzugefügt, aber nicht, wenn eine
Datei entfernt worden ist.
•
•
2.0.158.4505
2006-09-14
<
start_when_directory_chan
ged>
Job.start_when_directory_
changed()
Subprocess.own_process_group
Unter Unix wird der kill() auf
Prozesse jetzt zusätzlich mit
negativer Pid ausgeführt, um die
ganze Prozessgruppe zu beenden.
•
•
Software- und Organisations-Service GmbH
Subprocess.own_process_gr
oup
factory.ini (Abschnitt
[spooler], Eintrag
subprocess.own_process_gr
oup= …)
August 2014
Änderungsprotokoll
319
Revision
Datum
Bemerkung
2.0.158.4484
2006-09-13
Doppelte Einträge in
spooler_task.changed_directories
Task konnte mehrfache Einträge
enthalten, wenn der JobScheduler
mehrfache Änderungen desselben
Verzeichnisses bemerkte, bevor die
Task gestartet werden konnte. Jetzt
wird jedes Verzeichnis nur einmal
eingetragen.
<process> gibt bei Prozessstart
Kommandozeile aus
•
•
<process>
[
i
n
f
o
]
SCH
EDU
LER
-98
7
Starting process:
program and
arguments
spooler_log.mail.to etc. liefern
Default-Werte
Folgende Aufruf liefern die
Default-Werte aus den .ini-Dateien:
•
•
•
•
•
•
•
Mail.from
Mail.to
Mail.cc
Mail.bcc
Mail.subject
Mail.smtp
Mail.queue_dir
Web_service_operation.peer_ip
und .peer_hostname
Zwei neue Aufrufe:
Web_service_operation.pee
•
•
r_ip
Web_service_operation.pee
r_hostname
Dateiaufträge
In <job_chain> können zwei neue
XML-Elemente angegeben werden,
und ein Kommando liefert die
Schwarze Liste:
<file_order_source>
•
<file_order_sink>
•
<show_job_chains>
•
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
320
Revision
Datum
Bemerkung
2.0.157.4442
2006-08-30
<show_state
what="job_commands" liefert alle
<commands>
Bisher lieferte der JobScheduler nur
das erste <commands> eines Jobs.
2.0.157.4439
2006-08-25
-send-cmd=... liefert Ausgabe
ohne Null-Byte
•
-send-cmd gibt die Antwort des
Schedulers ohne das über
TCP übertragene Nullbyte aus.
Damit wird nach stdout ein
wohlgeformtes XML-Dokument
geschrieben.
2.0.157.4436
2006-08-25
Subprocess.start( String[] ) für
Java funktioniert
•
Software- und Organisations-Service GmbH
Subprocess.start()
funktionierte in Java nicht mit
einem String-Array. Das ist
behoben.
August 2014
Änderungsprotokoll
321
Revision
Datum
Bemerkung
2.0.157.4424
2006-08-18
<job stop_on_error="no">
•
<job stop_on_error="no">
verhindert den Stopp des Jobs
wegen einer Fehlermeldung
einer Task. Bei -log-level
=debug3 gibt der JobScheduler
am Ende einer fehlerhaften
Task die Meldungen
SCHEDULER-977 oder
SCHEDULER-978 aus.
spooler_task.trigger_files
•
•
Task.trigger_files
<process> : Dem Prozess wird
die Umgebungsvariable
SCHEDULER_TASK_TRIGGER_FI
LES übergeben.
<environment>:
Originalgroßschreibung der
Umgebungsvariablennamen
Der JobScheduler setzte die
Umgebungsvariablennamen in
Kleinschreibung. Jetzt verwendet er
die Schreibung wie in <environment
> angegeben. Unter Windows hat
das keine Auswirkung, weil die
Schreibung keine Rolle spielt.
Aufträge mit <period repeat="...">
: jeder zweite Tag wurde
ausgelassen
Wenn der JobScheduler als
nächsten Startzeit mit repeat= eine
Startzeit errechnete, die außerhalb
der Periode lag (immer nach
Mitternacht), dann nahm er die auf
die errechnete Startzeit folgende
Periode, die aber nicht die nächste,
sondern die übernächste ist.
Bei einem einfachen <run_time
period="300"> führte das um
Mitternacht zum Überspringen des
folgenden Tags. Das ist korrigiert.
Der JobScheduler ermittelt die
folgende Periode aus der Endzeit
der aktuellen Periode.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
322
Revision
Datum
Bemerkung
2.0.156.4406
2006-08-09
Signal einer abgebrochenen Task
wird auch bei nicht <process>
-Jobs zum negativen Exit code
Nur Unix: Bisher ist das Signal einer
abgebrochenen Task nur bei <
process> -Jobs als negativer
Exit-Code übernommen worden.
Jetzt gilt das für alle Jobs.
<job ignore_signals="...">
Eine Task, die mit Signal endet
(durch kill oder Absturz), muss
nicht mehr zum Stopp des Jobs
führen.
•
<job
ignore_signals="SIGTERM
SIGKILL ...">
<commands
on_exit_code="SIGTERM">
Nur Unix: Die Signalnamen können
aufgeführt werden.
•
•
2.0.155.4396
2006-07-27
<commands
on_exit_code="SIGTERM
SIGKILL ...">
<commands
on_exit_code="signal">
<show_job
what="job_commands">
Mit dem Attribut
what="job_commands" liefern die
Kommandos, die das Element <job>
zeigen, auch das Element <
commands> der Job-Konfiguration.
•
•
•
•
Software- und Organisations-Service GmbH
<show_job
what="job_commands">
<show_jobs
what="job_commands">
<show_job_chains
what="job_commands">
<show_state
what="job_commands">
August 2014
Änderungsprotokoll
323
Revision
Datum
Bemerkung
2.0.154.4393
2006-07-27
Datenbankzugriffe auf die Tabelle
scheduler_orders
Der Primärschlüssel der Tabelle
SCHEDULER_ORDERS ist um
SPOOLER_ID erweitert. Alle
Where-Klauseln auf diese Tabelle
sind um SPOOLER_ID und JOB_CHAIN
ergänzt worden.
Clob RUN_TIME wird nur noch bei
gefüllter run_time gesetzt.
2.0.154.4390
2006-06-30
Java-Job ohne Konstruktor
Ein Java-Job ohne parameterlosen
Konstruktor führte zum Abbruch des
Prozesses statt zur Exception
java.lang.NoSuchMethodError.
<config java_class_path="">
Das Attribut java_class_path
wurde im Betrieb mit
Prozessklassen nicht ausgewertet.
•
2.0.154.4379
2006-06-20
<config
java_class_path="…">
history_on_process verhält sich
jetzt wie dokumentiert
Eine falsche Angabe wird nicht mehr
ignoriert, sondern führt zum Fehler.
•
Software- und Organisations-Service GmbH
factory.ini (Abschnitt [job],
Eintrag history_on_process=
…)
August 2014
Änderungsprotokoll
324
Revision
Datum
Bemerkung
2.0.154.4366
2006-06-19
Ein paar Verbesserungen in der
internen Ereignisverarbeitung
Neues Attribut wait_until liefert
den Zeitpunkt der nächsten
geplanten Aktion. Nach etwa 20
Minuten Nichtstun gibt der
JobScheduler eine Meldung aus, bis
wann und worauf er wartet.
•
•
<state wait_until="…">
SCHEDULER-972
<show_state> lieferte Fehler bei
beendeten Subprozess, deshalb
evt. keine eMail
<show_state> und andere
Kommandos, die den Task-Zustand
zeigen, lieferte einen Fehler, wenn
ein Subprozess oder der
Task-Prozess selbst beendet war
und der JobScheduler dies noch
nicht zur Kenntnis genommmen
hatte. Grund: Der Systemaufruf zum
Lesen der Priorität liefert einen
Fehler.
Das konnte insbesondere bei <
kill_task> mit Subprozess dazu
führen, dass die eMail am Ende der
Task nicht versendet und statt
dessen der Fehler SCHEDULER-302
ausgegeben wird.
•
•
•
Software- und Organisations-Service GmbH
<kill_task>
<subprocess priority="…">
Log.mail_on_error
August 2014
Änderungsprotokoll
325
Revision
Datum
Bemerkung
2.0.154.4352
2006-06-16
<process param="">:
Task-Parameter werden ersetzt
Im Attribut param= ersetzt der
JobScheduler jetzt auch
Task-Parameter. Die haben Vorrang
vor den Umgebungsvariablen. Damit
kann für jede Task eine andere
Parameterzeile übergeben werden.
•
<process param="…">
Neue Eigenschaft Order.at
•
Order.at
Strg-C bricht nicht mehr die
Prozesse ab
Strg-C wirkt nur noch auf den
Scheduler-Prozess, aber nicht mehr
auf die Task-Prozesse (außer unter
Windows <process> und <script>
). Damit kann der JobScheduler
nach Strg-C die Tasks ordentlich
beenden. Ein zweites Strg-C führt
nach wie vor zum sofortigen Ende
aller Tasks und des Schedulers.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
326
Revision
Datum
Bemerkung
2.0.154.4339
2006-06-06
-env= korrigiert (Windows)
-env= hat die Variablen für
Kindprozesse gesetzt, aber nicht für
den eigenen. (Das wird nämlich von
Microsofts C unterschieden.)
•
-env
<add_order replace="yes">
Das XML-Schema erlaubt jetzt
replace="yes".
•
<add_order replace="…">
Neue Option -expand-classpath=
Expandiert den als Parameter
angegebenen Java-Classpath, d.h.
die Joker werden verarbeitet wie in
sos.ini (Abschnitt [java], Eintrag
class_path= …).
•
-expand-classpath
<commands on_exit_code="0">
•
•
•
•
Software- und Organisations-Service GmbH
Neue Eigenschaft
Task.exit_code (int),
anfänglich 0. Log.error() ,
Task.error() oder eine
Exception der Task setzen
Log.exit_code =1. exit_code
kann auch vom Job selbst
gesetzt werden, wird aber
unter den oben aufgeführten
Bedingungen vom
JobScheduler überschrieben.
Damit liefert jede im
JobScheduler mögliche Task
am Ende einen exit_code.
Der exit_code wird in die
Datenbanktabelle
scheduler_history in die
neue Spalte exit_code
geschrieben, die der
JobScheduler automatisch
anlegt.
Unter Unix liefert ein
abgebrochener Prozess die
Nummer des Signals negativ
als Exit-Code.
<job> wird um <commands
on_exit_code="…"> erweitert.
Für das Attribut on_exit_code
August 2014
Änderungsprotokoll
Revision
327
Datum
Bemerkung
kann eine Folge von
Exit-Codes, "success"
(dasselbe wie 0) oder "error"
angegeben werden. Letztere
Einstellung gilt für alle
Exit-Codes außer 0, die nicht
in anderen <commands
on_exit_code="…">
•
•
aufgeführt sind. Jedem
Exit-Code ist damit nicht mehr
als ein <commands>
zugeordnet.
Ein Fehler bei der
Kommando-Ausführung
verhindert die Ausführung der
folgenden Kommandos und
wird zur Task protokolliert. Der
Job wird gestoppt.
<commands> darf leer sein.
<copy_params>
<params> erhält das neue
Kind-Element <copy_params
from="…"> . Es kann nur unter <job
><commands> in <start_job><
params> und <add_order><params>
verwendet werden und kopiert an
seine Stelle die Parameter der Task
oder des Auftrags.
<copy_params from="order"> ist
ein Fehler, wenn es keinen Auftrag
gibt.
Aufträge mit Startzeit
Aufträge können einen Startzeit
haben, die in der Datenbank
gespeichert wird und somit bei
Scheduler-Neustart erhalten bleibt.
Ein noch nicht ausgeführter Auftrag
mit verstrichener Startzeit wird sofort
gestartet (sofern die <run_time>
des Jobs dies erlaubt).
Das entspricht dem Verhalten von <
start_job at="…"> .
•
<add_order at="…">
Relative Zeitangabe mit
now+HH:MM
•
•
Software- und Organisations-Service GmbH
<start_job at="now+...">
<add_order at="now+...">
August 2014
Änderungsprotokoll
Revision
328
Datum
Bemerkung
Mögliche Angaben sind:
•
•
•
•
•
•
now
now + seconds
now + hh:mm
now + hh:mm:ss
yyyy-mm-dd HH:MM
yyyy-mm-dd HH:MM:SS
language="perl" unter Windows
Unter Windows übergab der
JobScheduler nur bei <script
language="perlscript"> die
folgende Anweisung:
Win32::OLE->Option( Warn =>
3 );
<script language="perl"> hat
jetzt dasselbe Verhalten. Damit
ignoriert Perl nicht länger einen
Fehler bei einem Aufruf einer
Scheduler-Methode.
2.0.153.4313
2006-05-29
Joker im Java-Classpath
class_path =
c:\directory\sos.*.jar;...
•
Software- und Organisations-Service GmbH
sos.ini (Abschnitt [java],
Eintrag class_path= …)
August 2014
Änderungsprotokoll
329
Revision
Datum
Bemerkung
2.0.151.4305
2006-05-26
Umgebungsvariablen mit ${name}
Dort, wo Umgebungsvariablen mit $
name aufgerufen werden können,
kann jetzt auch ${ name }
geschrieben werden. Damit ist die
Trennung zum anschließenden Text
deutlicher.
In <base file=""> und <include
file=""> lassen sich
Umgebungsvariablen nutzen
•
•
<base file="…">
<include file="…">
Umgebungsvariablen mit ${name}
Dort, wo bisher
Umgebungsvariablen mit $ name
aufgerufen werden können, kann
jetzt auch ${ name } geschrieben
werden. Damit ist die Trennung zum
anschließenden Text deutlicher.
spooler_task.params korrigiert
Der Aufruf konnte zum Abbruch des
Schedulers führen.
•
Software- und Organisations-Service GmbH
Variable_set.names
August 2014
Änderungsprotokoll
330
Revision
Datum
Bemerkung
2.0.151.4304
2006-05-26
<job min_tasks=...>
Der JobScheduler kann dafür
sorgen, dass eine minimale Anzahl
Tasks läuft.
•
<job min_tasks="…">
Subprocess.wait_for_termination(
int) funktioniert jetzt unter Unix
Unter Unix wurde der Parameter für
die Wartezeit ignoriert. Das ist
behoben.
•
Subprocess.wait_for_termi
nation()
Perl-Schnittstelle unter Unix um
Objekt- und Array-Parameter
erweitert
Die Perl-Schnittstelle nimmt damit
auch unter Unix die folgenden
Aufrufe an:
•
•
•
•
•
Spooler.add_job_chain()
Job_chain.add_order()
Order.params
Task.create_subprocess()
Subprocess.start()
Betrifft die Datei
libsosperlscript.so.
Neuer Auftrag mit Startzeit weckt
schlafende Task
Ein Auftrag mit Startzeit weckt jetzt
eine schlafende Task (im Zustand
running_waiting_for_order), sodass
der Auftrag sofort zur Startzeit
ausgeführt wird.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
331
Revision
Datum
Bemerkung
2.0.151.4254
2006-04-13
Neue Option -env=NAME=WERT
•
•
-env =NAME=VALUE
-sos.ini setzt die
Umgebungsvariable SOS_INI.
Verhalten bei Fehler von <
start_when_directory_changed>
geändert
Bisher wurde die
Verzeichnisüberwachung beim Start
jeder Task wiederholt. Bei einem
Fehler in der
Verzeichnisüberwachung (z.B. weil
das Verzeichnis entfernt worden
war) wurde der Job gestoppt,
während die Task zuende laufen
konnte, und keine weitere Task
wurde mehr gestartet.
Jetzt stoppt der JobScheduler den
Job nicht mehr direkt. Die
Verzeichnisüberwachung wird am
Ende der Task (nach
spooler_exit() ) wiederholt. Ein
Fehler dabei führt zum Stopp des
Jobs, der aber mit <
delay_after_error> abgefangen
werden kann.
•
<
start_when_directory_chan
ged>
Web-Service-Parameter werden in
XSLT-Stylesheets übernommen
Parameter, die Apostroph und
Anführungszeichen enthalten,
werden mit Warnung abgewiesen,
da offenbar solche Werte libxslt nicht
übergeben werden können.
•
Software- und Organisations-Service GmbH
<web_service><params>
August 2014
Änderungsprotokoll
332
Revision
Datum
Bemerkung
2.0.151.4253
2006-04-12
Neue Eigenschaft Order.params
•
Order.params
Web-Service-Parameter werden in
XSLT-Stylesheets übernommen
Parameter, die Apostroph und
Anführungszeichen enthalten,
werden mit Warnung abgewiesen,
da offenbar solche Werte libxslt nicht
übergeben werden können.
•
2.0.150.4240
2006-04-06
Schema erlaubt wieder <
delay_after_error delay="stop">
•
2.0.150.4233
2006-04-04
<web_service><params>
<delay_after_error
delay="stop">
command_line.xml neu
strukturiert
scheduler_client entfällt wieder. Die
Optionen sind im Programm
scheduler integriert. Die
verschiedenen Aufrufe des
JobSchedulers sind jetzt
dokumentiert, siehe z.B.
"Laufendem JobScheduler einen
Job übergeben".
2.0.150.4225
2006-03-31
scheduler.xsd auf ISO-8859-1
begrenzt
XML-Kommandos können nur
Zeichen aus ISO-8859-1 enthalten.
Prozess-Prioritäten
•
•
•
•
•
Software- und Organisations-Service GmbH
<job
priority="below_normal">
Task.priority
Task.priority_class
Subprocess.priority
Subprocess.priority_class
August 2014
Änderungsprotokoll
333
Revision
Datum
Bemerkung
2.0.149.4218
2006-03-25
scheduler_client
Das neue Programm
scheduler_client kann dem
JobScheduler Jobs und Aufträge
übergeben.
Start eines Jobs, dessen Skript über
stdin übergeben wird:
Übergabe eines Auftrags:
<job temporary="true">
Ein temporärer Job wird erst
gelöscht, wenn die <run_time>
keine Startzeit mehr vorsieht und die
Task-Warteschlange leer ist.
<script language="shell">
Neue Skript-Sprache "shell" erlaubt
es, Shell-Jobs in der
XML-Konfiguration anzugeben. (Für
scheduler_client)
•
<script language="shell">
Neue Angabe für <run_time>: <at>
•
2.0.148.4199
2006-03-17
<at at="2006-03-24 12:00"
>
Der JobScheduler läuft wieder
unter Windows 2000
Die fehlerhafte Routine
SafeArrayGetVartype() in Windows
2000 wird umgegangen.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
334
Revision
Datum
Bemerkung
2.0.148.4178
2006-03-10
<web_service> mit <params>
Einem Web-Service lassen sich
Parameter geben, die in den Jobs
gelesen werden können.
<web_service>
•
Web_service.params
•
Meldungen ins Englische
übersetzt und mit Codes
versehen
Die Meldungen (außer einige
Debug-Meldungen) sind jetzt
codiert, wie z.B. "SCHEDULER-900
JobScheduler is starting ...".
•
Liste der Meldungs-Codes
(Seite 226)
Neue Eigenschaften
Request|Response.content_type
und .charset_name
•
•
•
•
2.0.148.4155
2006-03-05
Web_service_request.conte
nt_type
Web_service_request.chars
et_name
Web_service_response.cont
ent_type
Web_service_response.char
set_name
<job_chain
orders_recoverable="no">
•
•
<job_chain
orders_recoverable="no">
Job_chain.orders_recovera
ble
<script java_class="–"> ist
überschreibbar
•
Software- und Organisations-Service GmbH
<script java_class="…">
August 2014
Änderungsprotokoll
335
Revision
Datum
Bemerkung
2.0.148.4126
2006-03-01
Neuer C++-Compiler für Windows
Ab Revision 4126 ist alle Software
für Windows mit Microsoft Visual
Studio 2005 C++ übersetzt. Es sollte
keine Änderung bemerkbar sein.
XML-Schema eingeführt
Die XML-Konfiguration und die
XML-Kommandos werden gegen ein
eingebautes XML-Schema geprüft.
Die neue Option -show-xml-schema
liefert das XML-Schema. Zum Test
ist eine aktuelle Version übers
Internet erreichbar:
http://www.zschimmer.com/2006/sch
eduler.xsd.
Neue Kommandozeilen-Optionen:
•
•
-show-xml-schema
-validate-xml
Neue Eigenschaft
order.xml_payload
Zusätzlich zur payload kann
Order.xml_payload ein
XML-Dokument aufnehmen.
Eine neue Eigenschaft und ein
neues XML-Element:
•
•
Order.xml_payload
<xml_payload>
<web_service job_chain=''>
Ein Web-Service kann mit einer
Job-Kette implementiert werden.
Neue XML-Elemente, neue
Attribute:
•
•
<web_service
job_chain="…">
<web_service timeout="…">
Neue Klassen und Methoden:
•
•
•
•
Software- und Organisations-Service GmbH
Order.web_service_operati
on
Web_service_operation
Web_service_request
Web_service_response
August 2014
Änderungsprotokoll
336
Revision
Datum
Bemerkung
2.0.147.4100
2006-02-21
Dateityp jdbc löscht temporäre
Dateien unter Windows
Beim Schreiben eines LOBs wurde
die temporäre Dateien nicht
gelöscht, weil
FileInputStream.close() nicht
gerufen wurde. Gilt nicht für Oracle.
Das ist korrigiert.
2.0.147.4099
2006-02-20
HTTP-Server korrigiert
2.0.147.4091
2006-02-09
Variable_set.names
Variable_set.names liefert die
Variablennamen, durch Semikolon
getrennt.
2.0.146.4073
2006-02-02
factory.ini queue_dir=
queue_dir kann wieder in der Datei
factory.ini eingestellt werden. Betrifft
JobScheduler ab
2.0.139.3889 (2005-09-15).
Die beste Stelle für diese Einstellung
bleibt in der Datei sos.ini
(Abschnitt [mail], Eintrag
queue_dir= …).
2.0.146.4061
2006-01-30
Web-Dienste
Neue XML-Elemente, neue
Attribute:
•
•
•
•
•
•
•
•
•
•
•
<web_services>
<web_service>
<add_order
web_service="…">
<start_job
web_service="…">
<order web_service="…">
<payload>
<task web_service="…">
<service_request>
<content>
<job_chain visible="no">
<job visible="no">
Neue Klassen und Methoden:
•
•
•
•
Software- und Organisations-Service GmbH
Web_service
Order.xml
Order.web_service
Task.web_service
August 2014
Änderungsprotokoll
337
Revision
Datum
Bemerkung
2.0.145.4049
2006-01-15
Job_chain.remove()
Neue Kommandos
Job_chain.remove() und <
remove_job_chain> .
2.0.144.4038
2005-12-15
Order.setback() und
Job.set_max_order_setbacks()
jetzt auch in Java verfügbar
Siehe Order.setback() und
Job.max_order_setbacks .
2.0.144.4036
2005-12-08
eMail-Einstellungen aus
factory.ini [job ...] werden wieder
berücksichtigt
Wenn eine Task mit Fehler oder
Warnung endet, überschreibt der
JobScheduler die Einstellung von
log_mail_subject. Das
eMail-Stylesheet kann dies ändern.
2.0.144.4026
2005-11-11
Auftrag mit <run_time> weckt
jetzt auf Auftrag wartende Task
Bislang hat der JobScheduler einen
wegen run_time wiederholten
Auftrag verschlafen, wenn bereits
eine Task auf den Auftrag wartete
(im Zustand
running_waiting_for_order).
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
338
Revision
Datum
Bemerkung
2.0.144.4015
2005-11-08
SQL-Tabellenamen ohne "";
Große order.payload möglich
Die SQL-Anweisungen des
Schedulers verwenden die
Tabellennamen großgeschrieben
ohne Anführungszeichen.
(Ausnahme: Zugriffe über den
Dateityp sql).
Die Order.payload wird mit dem
Hostware-Mechanismus als CLOB
geschrieben und kann damit beliebig
groß sein. Das ist gut für
Variable_set .
HPUX: Hostjava ist im
JobScheduler eingebunden
Weil es ein Problem mit gcc 3.2
beim Nachladen der libhostjava.sl
gibt (die statischen Variablen
werden nicht initialisiert), ist
Hostjava auf HP-UX fest
eingebunden.
system_information() implementiert
für HP-UX die
Plattenplatz-Funktionen bereit.
Tabelle scheduler_variables
geändert
Die Spalte "wert" ist jetzt ein Integer.
Die neue Spalte Textwert ist ein
Varchar(250) (wird vom
JobScheduler zurzeit nicht
verwendet).
2.0.143.4005
2005-11-07
<security
ignore_unknown_hosts="yes">
<security
ignore_unknown_hosts="yes">
funktioniert wieder.
2.0.142.4003
2005-11-03
<job java_options=>
Siehe <job java_options="…">
(Seite 37).
Außerdem wirkt <config
java_options="…"> jetzt auch,
wenn ein Job in einem eigenen
Prozess läuft.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
339
Revision
Datum
Bemerkung
2.0.140.3999
2005-10-31
Job-<script> ist überschreibbar
Siehe <script> (Seite 66).
Die Attribute (language= etc.) sind
nicht änderbar. Nur der Skript-Code
mit <include> ist änderbar. Die
nächste Task verwendet den neuen
Skript-Code.
2.0.140.3995
2005-10-30
Monitor zur Überwachung eines
Jobs
Siehe <monitor> (Seite 50).
Für Monitoren in Javascript muss
die aktuelle spidermonkey.dll bzw.
libspidermonkey.so eingesetzt
werden.
Neues XML-Element <job_chains>
Siehe <job_chains> (Seite 47).
Neues XML-Element <
start_when_directory_changed>
Siehe <
start_when_directory_changed>
(Seite 71).
Neues XML-Element <
delay_after_error>
Siehe <delay_after_error> (Seite
27).
Neues XML-Element <
delay_order_after_setback>
Siehe <
delay_order_after_setback>
(Seite 28).
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
340
Revision
Datum
Bemerkung
2.0.140.3943
2005-09-25
Wegen <run_time> wiederholter
Auftrag erzeugt eigenen
Historieneintrag
Wenn ein Auftrag mit den
Endzustand erreicht hat und dessen
Order.run_time einen weiteren
Termin vorsieht, dann
•
•
schließt der JobScheduler das
Auftragsprotokoll,
schreibt einen Eintrag in die
Auftragshistorie, siehe
factory.ini (Abschnitt
[spooler], Eintrag
db_order_history_table= …)
•
2.0.140.3939
2005-09-24
(Seite 88),
und beginnt ein neues
Auftragsprotokoll.
Windows: Doppeltes Ctrl-C bricht
alle Prozesse ab
Das erste Ctrl-C beendet den
JobScheduler wie <modify_spooler
cmd="terminate"> .
Das zweite Ctrl-C führt dann zum
Abbruch aller Prozesse.
Erst das dritte lässt das
Betriebssystem den JobScheduler
abbrechen.
Terminate mit Frist
Der JobScheduler kann jetzt mit
Frist beendet werden. Wenn
innerhalb der Frist die Tasks nicht
enden, bricht der JobScheduler die
Prozesse der Tasks ab, und wartet
dann längstens weitere 30s auf die
Tasks, bevor er sich beendet.
Siehe <modify_spooler
cmd="terminate"> (Seite 189) und
Spooler.terminate() .
2.0.139.3925
2005-09-21
Fehlerhaftes <include> im <
description> eines Jobs führt zur
Warnung im Jobprotokoll
(Bisher gab's einen Fehler nur im
Hauptprotokoll.)
Siehe <description> (Seite 28).
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
341
Revision
Datum
Bemerkung
2.0.139.3889
2005-09-15
Neue Behandlung der
Voreinstellungen für den
eMail-Versand
2.0.138.3866
2005-09-07
spooler_log.debug1() bis
spooler_log.debug9() im
Scheduler-Skript werden nicht
mehr unterdrückt
Datenbanktabellen werden mit
varchar statt char angelegt
2.0.138.3851
2005-09-06
Option -pid-file wird bei
Installation als Windows-Dienst
übernommen
Siehe -pid-file
XSLT-eMail erhält <order>
-Element
Das Element <order> wird bei
einem Abbruch der Task im Element
<task> geliefert.
2.0.137.3844
2005-08-24
-sos.ini= akzeptiert Leerzeichen
im Dateinamen
2.0.137.3839
2005-08-21
Neue Methode Job.remove(),
neues XML-Kommando <
modify_job cmd="remove">
Siehe Job.remove() und <
modify_job cmd="remove"> (Seite
187).
<remove_order> wirkt sofort auf
Datenbank
Fehler-eMails jetzt mit richtigem
Nachrichtentext
2.0.136.3836
2005-08-12
Neue Methoden Task.stdout_path
und Task.stderr_path
Siehe Task.stdout_path und
Task.stderr_path .
<remove_order> wirkt sofort auf
Datenbank
Fehler-eMails jetzt mit richtigem
Nachrichtentext
2.0.136.3834
Software- und Organisations-Service GmbH
2005-08-12
Fehler bei SQL-Insert für neue
Task führt nicht mehr zur
eMail-Flut
August 2014
Änderungsprotokoll
342
Revision
Datum
Bemerkung
2.0.134.3832
2005-08-12
Änderung der <run_time> eines
Auftrags wirkt nur am Beginn der
Job-Kette
Eine Änderung der <run_time>
eines Auftrags wirkt nur, wenn er am
Anfang der Job-Kette steht und noch
nicht ausgeführt wird. Sonst wird die
Wirkung verzögert, bis der Auftrag
einen Endzustand erreicht hat.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
343
Revision
Datum
Bemerkung
2.0.135.3824
2005-08-10
Kommando <modify_order> kann
<run_time> ändern
In <modify_order> kann jetzt <
run_time> gesetzt werden.
Methode
Job_chain.add_or_replace_order(
) neu
Job_chain.add_or_replace_order
() wirkt wie
Job_chain.add_order() , wenn die
Job-Kette keinen Auftrag mit
gleicher Kennung hat.
Hat die Job-Kette bereits einen
Auftrag mit gleicher Kennung, dann
wird dieser ersetzt. Genauer: er wird
aus der Job-Kette entfernt (wie mit
Order.remove_from_job_chain()
), und der neue Auftrag wird
hinzugefügt.
Falls der ersetzte Auftrag gerade
von einer Task ausgeführt wird,
dann wartet der JobScheduler die
Ausführung ab, bevor der neue
Auftrag ausgeführt werden kann.
Der ersetzte Auftrag erscheint in der
XML-Antwort als <order
replaced="yes"> . Dies nur
innerhalb von <task> , (nicht von <
order_queue> ), denn der Auftrag ist
nicht mehr in der
Auftragswarteschlange.
Der neue, ersetzende Auftrag
erscheint in der XML-Antwort als <
order replacement="yes"> .
Siehe auch <add_order
replace="yes"> (Seite 14).
Methode
Order.remove_from_job_chain()
geändert
( Order.remove_from_job_chain()
wirkt wie <remove_order> .)
Wenn der Auftrag gerade von einer
Task ausgeführt wird, liefert die
Eigenschaft Order.job_chain
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
Revision
344
Datum
Bemerkung
weiterhin die Job-Kette, aus der der
Auftrag gerade entfernt wird. Erst
wenn die Ausführung beendet ist,
liefert die Eigenschaft null (außer
der Auftrag ist wieder in eine
Job-Kette eingetragen worden).
Damit bleibt die Eigenschaft
job_chain während der Ausführung
durch die Task stabil.
Der entfernte, aber noch
ausgeführte Auftrag erscheint in der
XML-Antwort als <order
removed="yes"> . Dies nur
innerhalb von <task> , (nicht von <
order_queue> ), denn der Auftrag ist
nicht mehr in der
Auftragswarteschlange.
Java-Methode sos.spooler.id()
liefert auch Integer als String
Statt einem Cast (String) wird jetzt
.toString() gerufen, so dass auch
eine Auftragskennung, die als
Integer-Variant (o.dgl.) gespeichert
ist, in Java als String geliefert wird.
(Bisher gab es eine
ClassCastException.)
let_run_terminate_and_restart
beendet Tasks im Zustand
running_waiting_for_order
Siehe <modify_spooler
cmd="let_run_terminate_and_res
tart"> (Seite 189).
2.0.134.3818
2005-08-04
Klasse sos.spooler.Mail unter
Unix/Java funktionsfähig
Unter Unix in Java war die Klasse
sos.spooler.Mail nicht benutzbar
(Fehlercode COM-80020009 DISP_E_EXCEPTION).
2.0.134.3817
2005-08-03
Order <period single_start>
korrigiert
Der nächste Single_start bei einem
Auftrag mit <period> wird jetzt
korrekt ausgeführt.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
345
Revision
Datum
Bemerkung
2.0.134.3814
2005-08-01
Subprocess.termination_signal
Subprocess.termination_signal
liefert unter Unix 0 oder die Nummer
des Signals, mit dem der
Subprozess endete.
Unter Windows liefert die Methode
0.
2.0.134.3812
2005-07-30
delay_after_error erzeugt neue
Task
Eine Task, für die nach einem Fehler
Job.delay_after_error wirksam
wird, fügt der JobScheduler jetzt (mit
neuer Kennung) erneut in die
Task-Warteschlange ein. Dabei
werden die Task-Parameter
übernommen.
Das gilt nicht für Auftragsjobs. Für
die wird wie bisher keine neue Task
gestartet, denn der Start wird durch
den evtl. anstehenden Auftrag
angestossen.
Neues Attribut
delayed_after_error_task im
Antwort-XML-Element <task>
Siehe <task
delayed_after_error_task="…">
(Seite 222).
Neue Attribute delay_after_error=
und in_period= im
Antwort-XML-Element <job>
Siehe <job
delay_after_error="…"> (Seite
37)
und <job in_period="…"> (Seite
37).
2.0.133.3786
2005-07-04
XSLT-Stylesheets für eMails
Mail.xslt_stylesheet_path setzt
das XSLT-Stylesheet für eMails.
Neue Klasse Xslt_stylesheet
Spooler.create_xslt_stylesheet
() liefert ein Xslt_stylesheet .
2.0.132.3743
Software- und Organisations-Service GmbH
2005-06-25
<order_queue> liefert Attribut
next_start_time
August 2014
Änderungsprotokoll
346
Revision
Datum
Bemerkung
2.0.130.3742
2005-06-24
Fehlendes <run_time> wird
wieder wie leeres <run_time/>
interpretiert
2.0.129.3696
2005-06-08
Auftragsjob stoppt bei return
false in spooler_init() oder
spooler_open()
Ein Auftragsjob, der false in
spooler_init() oder
spooler_open() liefert, wird mit
Fehlermeldung gestoppt.
Das Stoppen kann mit
Job.delay_after_error verhindert
werden.
Der Auftrag bleibt in der
Auftragswarteschlange des Jobs
und wird beim nächsten
erfolgreichen Start des Jobs
verarbeitet.
2.1.3.
2010-09-23
JS-474: Aufräge verhalten sich
wie Standalone-Jobs bzgl.
Runtimes/Perioden
Eine leere Runtime oder eine leere
Periode (keine repeat und kein
single_start Attribut) bewirkt nicht
mehr einen automatischen start des
Auftrags. Ist eine solche
Runtimes/Periode zum start eines
Auftrags genutzt worden, müssen
diese Runtimes umkonfiguriert
werden. Eine Lösung ist das
single_start Attribut zu verwenden.
2.1.3.
2010-08-27
JS-559: Der JobScheduler kann
jetzt als Agent fungieren
Durch die Verwendung eines
speziellen Lizenzschlüssels ist es
möglich, den JobScheduler als
Agenten zu betreiben. Er kann in
dieser Funktion keine eigenen Jobs
starten, sondern nimmt lediglich
Aufträge von remote schedulern
entgegen.
Software- und Organisations-Service GmbH
August 2014
Änderungsprotokoll
347
Revision
Datum
Bemerkung
2.1.2.
2010-08-11
JS-540: Weitere script-Attribute
für Java API-Jobs
Das script-Element hat ein weiteres
Atribute 'java_class_path' (s.
Dokumentation). Es wird dem
aktuellen Klassenpfad davorgesetzt.
Die aktuellen Werte für den Java
Klassenpfad und die Java VM
Options werden im Task-Log
ausgegeben.
2.1.2.
2010-07-29
JS-550: on_exit_code 'error' wird
korrekt ausgewertet
Wenn on_exit_code 'error' ist,
werden die Kommandos nur dann
ausgeführt, wenn der OS Exit Code
ungleich 0 ist. Bisher sind die
Kommandos immer ausgeführt
worden.
2.1.2.
2010-07-29
JS-436: Job der ausserhalb der
Periode endet erhält jetzt die
korrekte Startzeit
Auch wenn ein Job über das Ende
einer Periode hinaus läuft, erhält er
jetzt die korrekte nächste Startzeit
(nämlich den Beginn der nächsten
Periode).
Software- und Organisations-Service GmbH
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
348
Anhang C: Vom JobScheduler verwendete SQL-Anweisungen
Der JobScheduler richtet beim Start fehlende Tabellen mit folgenden Anweisungen ein. Die Anweisungen
unterscheiden sich nach verwendeter Datenbank-Software.
C.1 Vom JobScheduler verwendete SQL-Anweisungen für DB2®
CREATE TABLE SCHEDULER_VARIABLES
(
"NAME"
varchar(100) not null,
"WERT"
integer,
"TEXTWERT" varchar(250),
primary key ( "NAME" )
);
CREATE TABLE SCHEDULER_TASKS
(
"TASK_ID"
integer not null,
"SPOOLER_ID"
varchar(100) not null,
"CLUSTER_MEMBER_ID" varchar(100),
"JOB_NAME"
varchar(255) not null,
"ENQUEUE_TIME"
timestamp,
"START_AT_TIME"
timestamp,
"PARAMETERS"
clob,
"TASK_XML"
clob,
primary key( "TASK_ID" )
);
CREATE TABLE SCHEDULER_HISTORY
(
"ID"
integer not null,
"SPOOLER_ID"
varchar(100) not null,
"CLUSTER_MEMBER_ID" varchar(100),
"JOB_NAME"
varchar(255) not null,
"START_TIME"
timestamp not null,
"END_TIME"
timestamp,
"CAUSE"
varchar(50),
"STEPS"
integer,
"EXIT_CODE"
integer,
"ERROR"
numeric(1),
"ERROR_CODE"
varchar(50),
"ERROR_TEXT"
varchar(250),
"PARAMETERS"
clob,
"LOG"
blob,
primary key( "ID" )
);
CREATE
CREATE
CREATE
CREATE
INDEX
INDEX
INDEX
INDEX
SCHEDULER_HIST_1
SCHEDULER_HIST_2
SCHEDULER_HIST_3
SCHEDULER_HIST_4
on
on
on
on
SCHEDULER_HISTORY
SCHEDULER_HISTORY
SCHEDULER_HISTORY
SCHEDULER_HISTORY
(
(
(
(
"START_TIME" );
"SPOOLER_ID" );
"JOB_NAME" );
"CLUSTER_MEMBER_ID" );
CREATE TABLE SCHEDULER_ORDERS
(
Software- und Organisations-Service GmbH
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
349
"JOB_CHAIN"
varchar(255) not null,
"ID"
varchar(255) not null,
"SPOOLER_ID"
varchar(100) not null,
"DISTRIBUTED_NEXT_TIME"
timestamp,
"OCCUPYING_CLUSTER_MEMBER_ID" varchar(100),
"PRIORITY"
integer not null,
"STATE"
varchar(100),
"STATE_TEXT"
varchar(100),
"TITLE"
varchar(200),
"CREATED_TIME"
timestamp not null,
"MOD_TIME"
timestamp,
"ORDERING"
integer not null,
"PAYLOAD"
clob,
"INITIAL_STATE"
varchar(100),
"RUN_TIME"
clob,
"ORDER_XML"
clob,
primary key( "SPOOLER_ID", "JOB_CHAIN", "ID" )
);
CREATE TABLE SCHEDULER_ORDER_HISTORY
(
"HISTORY_ID" integer not null,
"JOB_CHAIN" varchar(255) not null,
"ORDER_ID"
varchar(255) not null,
"SPOOLER_ID" varchar(100) not null,
"TITLE"
varchar(200),
"STATE"
varchar(100),
"STATE_TEXT" varchar(100),
"START_TIME" timestamp not null,
"END_TIME"
timestamp not null,
"LOG"
blob,
primary key( "HISTORY_ID" )
);
CREATE INDEX SCHED_O_HIST_1 on SCHEDULER_ORDER_HISTORY ( "SPOOLER_ID" );
CREATE INDEX SCHED_O_HIST_2 on SCHEDULER_ORDER_HISTORY ( "JOB_CHAIN" );
CREATE INDEX SCHED_O_HIST_3 on SCHEDULER_ORDER_HISTORY ( "START_TIME" );
CREATE TABLE SCHEDULER_ORDER_STEP_HISTORY
(
"HISTORY_ID"
numeric(9)
not
"STEP"
numeric(9)
not
"TASK_ID"
numeric(9)
not
"STATE"
varchar(100)
"START_TIME"
timestamp
not
"END_TIME"
timestamp
primary key ( "HISTORY_ID","STEP" )
);
null,
null,
null,
,
null,
,
CREATE TABLE SCHEDULER_CLUSTERS
(
"MEMBER_ID"
varchar(100) not null,
"SCHEDULER_ID"
varchar(100) not null,
"PRECEDENCE"
integer,
"LAST_HEART_BEAT"
integer,
"NEXT_HEART_BEAT"
integer,
"ACTIVE"
numeric(1),
Software- und Organisations-Service GmbH
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
"EXCLUSIVE"
"DEAD"
"COMMAND"
"HTTP_URL"
"DEACTIVATING_MEMBER_ID"
"XML"
primary key( "MEMBER_ID"
350
numeric(1),
numeric(1),
varchar(250),
varchar(100),
varchar(100),
clob,
)
);
C.2 Vom JobScheduler verwendete SQL-Anweisungen für Microsoft SQL Server
CREATE TABLE SCHEDULER_VARIABLES
(
"NAME"
varchar(100) not null,
"WERT"
integer,
"TEXTWERT" varchar(250),
primary key ( "NAME" )
);
CREATE TABLE SCHEDULER_TASKS
(
"TASK_ID"
integer not null,
"SPOOLER_ID"
varchar(100) not null,
"CLUSTER_MEMBER_ID" varchar(100),
"JOB_NAME"
varchar(255) not null,
"ENQUEUE_TIME"
datetime,
"START_AT_TIME"
datetime,
"PARAMETERS"
ntext,
"TASK_XML"
ntext,
primary key( "TASK_ID" )
);
CREATE TABLE SCHEDULER_HISTORY
(
"ID"
integer not null,
"SPOOLER_ID"
varchar(100) not null,
"CLUSTER_MEMBER_ID" varchar(100),
"JOB_NAME"
varchar(255) not null,
"START_TIME"
datetime not null,
"END_TIME"
datetime,
"CAUSE"
varchar(50),
"STEPS"
integer,
"EXIT_CODE"
integer,
"ERROR"
bit,
"ERROR_CODE"
varchar(50),
"ERROR_TEXT"
varchar(250),
"PARAMETERS"
ntext,
"LOG"
image,
primary key( "ID" )
);
CREATE INDEX SCHEDULER_HISTORY_START_TIME on SCHEDULER_HISTORY ( "START_TIME" );
CREATE INDEX SCHEDULER_HISTORY_SPOOLER_ID on SCHEDULER_HISTORY ( "SPOOLER_ID" );
CREATE INDEX SCHEDULER_HISTORY_JOB_NAME
on SCHEDULER_HISTORY ( "JOB_NAME" );
Software- und Organisations-Service GmbH
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
CREATE INDEX SCHEDULER_H_CLUSTER_MEMBER
"CLUSTER_MEMBER_ID");
351
on SCHEDULER_HISTORY (
CREATE TABLE SCHEDULER_ORDERS
(
"JOB_CHAIN"
varchar(255) not null,
"ID"
varchar(255) not null,
"SPOOLER_ID"
varchar(100) not null,
"DISTRIBUTED_NEXT_TIME"
datetime,
"OCCUPYING_CLUSTER_MEMBER_ID" varchar(100),
"PRIORITY"
integer not null,
"STATE"
varchar(100),
"STATE_TEXT"
varchar(100),
"TITLE"
varchar(200),
"CREATED_TIME"
datetime not null,
"MOD_TIME"
datetime,
"ORDERING"
integer not null,
"PAYLOAD"
ntext,
"INITIAL_STATE"
varchar(100),
"RUN_TIME"
ntext,
"ORDER_XML"
ntext,
primary key( "SPOOLER_ID", "JOB_CHAIN", "ID" );
);
CREATE TABLE SCHEDULER_ORDER_HISTORY
(
"HISTORY_ID" integer not null,
"JOB_CHAIN" varchar(255) not null,
"ORDER_ID"
varchar(255) not null,
"SPOOLER_ID" varchar(100) not null,
"TITLE"
varchar(200),
"STATE"
varchar(100),
"STATE_TEXT" varchar(100),
"START_TIME" datetime not null,
"END_TIME"
datetime not null,
"LOG"
image,
primary key( "HISTORY_ID" );
);
CREATE INDEX SCHEDULER_O_HISTORY_SPOOLER_ID on SCHEDULER_ORDER_HISTORY ( "SPOOLER_ID"
);
CREATE INDEX SCHEDULER_O_HISTORY_JOB_CHAIN on SCHEDULER_ORDER_HISTORY ( "JOB_CHAIN"
);
CREATE INDEX SCHEDULER_O_HISTORY_START_TIME on SCHEDULER_ORDER_HISTORY ( "START_TIME"
);
CREATE TABLE SCHEDULER_ORDER_STEP_HISTORY
(
"HISTORY_ID"
numeric(9)
not
"STEP"
numeric(9)
not
"TASK_ID"
numeric(9)
not
"STATE"
varchar(100)
"START_TIME"
datetime
not
"END_TIME"
datetime
primary key ( "HISTORY_ID","STEP" )
);
Software- und Organisations-Service GmbH
null,
null,
null,
,
null,
,
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
352
CREATE TABLE SCHEDULER_CLUSTERS
(
"MEMBER_ID"
varchar(100) not null,
"SCHEDULER_ID"
varchar(100) not null,
"PRECEDENCE"
integer,
"LAST_HEART_BEAT"
integer,
"NEXT_HEART_BEAT"
integer,
"ACTIVE"
numeric(1),
"EXCLUSIVE"
numeric(1),
"DEAD"
numeric(1),
"COMMAND"
varchar(250),
"HTTP_URL"
varchar(100),
"DEACTIVATING_MEMBER_ID" varchar(100),
"XML"
ntext,
primary key( "MEMBER_ID" )
);
C.3 Vom JobScheduler verwendete SQL-Anweisungen für MySQL®
CREATE TABLE SCHEDULER_VARIABLES
(
"NAME"
varchar(100) not null,
"WERT"
integer,
"TEXTWERT" varchar(250),
primary key ( "NAME" )
)
Type=InnoDB;
CREATE TABLE SCHEDULER_TASKS
(
"TASK_ID"
integer not null,
"SPOOLER_ID"
varchar(100) not null,
"CLUSTER_MEMBER_ID" varchar(100),
"JOB_NAME"
varchar(255) not null,
"ENQUEUE_TIME"
datetime,
"START_AT_TIME"
datetime,
"PARAMETERS"
longtext,
"TASK_XML"
longtext,
primary key( "TASK_ID" )
)
Type=InnoDB;
CREATE TABLE SCHEDULER_HISTORY
(
"ID"
integer not null,
"SPOOLER_ID"
varchar(100) not null,
"CLUSTER_MEMBER_ID" varchar(100),
"JOB_NAME"
varchar(255) not null,
"START_TIME"
datetime not null,
"END_TIME"
datetime,
"CAUSE"
varchar(50),
"STEPS"
integer,
"EXIT_CODE"
integer,
"ERROR"
bool,
Software- und Organisations-Service GmbH
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
"ERROR_CODE"
"ERROR_TEXT"
"PARAMETERS"
"LOG"
primary key( "ID" )
353
varchar(50),
varchar(250),
longtext,
longblob,
)
Type=InnoDB;
CREATE
CREATE
CREATE
CREATE
INDEX
INDEX
INDEX
INDEX
SCHEDULER_HISTORY_START_TIME
SCHEDULER_HISTORY_SPOOLER_ID
SCHEDULER_HISTORY_JOB_NAME
SCHEDULER_H_CLUSTER_MEMBER
on
on
on
on
SCHEDULER_HISTORY
SCHEDULER_HISTORY
SCHEDULER_HISTORY
SCHEDULER_HISTORY
("START_TIME"
):
("SPOOLER_ID"
):
("JOB_NAME"
):
("CLUSTER_MEMBER_ID");
CREATE TABLE SCHEDULER_ORDERS
(
"JOB_CHAIN"
varchar(255) character set latin1
"ID"
varchar(255) character set latin1
"SPOOLER_ID"
varchar(100) character set latin1
"DISTRIBUTED_NEXT_TIME"
datetime,
"OCCUPYING_CLUSTER_MEMBER_ID" varchar(100),
"PRIORITY"
integer not null,
"STATE"
varchar(100),
"STATE_TEXT"
varchar(100),
"TITLE"
varchar(200),
"CREATED_TIME"
datetime not null,
"MOD_TIME"
datetime,
"ORDERING"
integer not null,
"PAYLOAD"
longtext,
"INITIAL_STATE"
varchar(100),
"RUN_TIME"
longtext,
"ORDER_XML"
longtext,
primary key ( "SPOOLER_ID", "JOB_CHAIN", "ID" )
)
Type=InnoDB;
not null,
not null,
not null,
CREATE TABLE SCHEDULER_ORDER_HISTORY
(
"HISTORY_ID" integer not null,
"JOB_CHAIN" varchar(255) not null,
"ORDER_ID"
varchar(255) not null,
"SPOOLER_ID" varchar(100) not null,
"TITLE"
varchar(200),
"STATE"
varchar(100),
"STATE_TEXT" varchar(100),
"START_TIME" datetime not null,
"END_TIME"
datetime not null,
"LOG"
longblob,
primary key( "HISTORY_ID" )
)
Type=InnoDB;
CREATE INDEX SCHEDULER_O_HISTORY_SPOOLER_ID on SCHEDULER_ORDER_HISTORY ( "SPOOLER_ID"
);
CREATE INDEX SCHEDULER_O_HISTORY_JOB_CHAIN on SCHEDULER_ORDER_HISTORY ( "JOB_CHAIN"
);
CREATE INDEX SCHEDULER_O_HISTORY_START_TIME on SCHEDULER_ORDER_HISTORY ( "START_TIME"
);
Software- und Organisations-Service GmbH
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
CREATE TABLE SCHEDULER_ORDER_STEP_HISTORY
(
"HISTORY_ID"
integer
not
"STEP"
integer
not
"TASK_ID"
integer
not
"STATE"
varchar(100)
"START_TIME"
datetime
not
"END_TIME"
datetime
primary key ( "HISTORY_ID","STEP" )
);
354
null,
null,
null,
,
null,
,
CREATE TABLE SCHEDULER_CLUSTERS
(
"MEMBER_ID"
varchar(100) not null,
"SCHEDULER_ID"
varchar(100) not null,
"PRECEDENCE"
integer,
"LAST_HEART_BEAT"
integer,
"NEXT_HEART_BEAT"
integer,
"ACTIVE"
bool,
"EXCLUSIVE"
bool,
"DEAD"
bool,
"COMMAND"
varchar(250),
"HTTP_URL"
varchar(100),
"DEACTIVATING_MEMBER_ID" varchar(100),
"XML"
longtext,
primary key( "MEMBER_ID" )
)
Type=InnoDB;
C.4 Vom JobScheduler verwendete SQL-Anweisungen für Oracle®
CREATE TABLE SCHEDULER_VARIABLES
(
"NAME"
varchar2(100) not null,
"WERT"
integer,
"TEXTWERT" varchar2(250),
primary key ( "NAME" )
);
CREATE TABLE SCHEDULER_TASKS
(
"TASK_ID"
integer not null,
"SPOOLER_ID"
varchar2(100) not null,
"CLUSTER_MEMBER_ID" varchar2(100),
"JOB_NAME"
varchar2(255) not null,
"ENQUEUE_TIME"
date,
"START_AT_TIME"
date,
"PARAMETERS"
clob,
"TASK_XML"
clob,
primary key( "TASK_ID" )
);
CREATE TABLE SCHEDULER_HISTORY
(
Software- und Organisations-Service GmbH
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
"ID"
"SPOOLER_ID"
"CLUSTER_MEMBER_ID"
"JOB_NAME"
"START_TIME"
"END_TIME"
"CAUSE"
"STEPS"
"EXIT_CODE"
"ERROR"
"ERROR_CODE"
"ERROR_TEXT"
"PARAMETERS"
"LOG"
primary key( "ID" )
355
integer not null,
varchar2(100) not null,
varchar2(100),
varchar2(255) not null,
date not null,
date,
varchar2(50),
integer,
integer,
numeric(1),
varchar2(50),
varchar2(250),
clob,
blob,
);
CREATE
CREATE
CREATE
CREATE
INDEX
INDEX
INDEX
INDEX
SCHEDULER_HISTORY_START_TIME
SCHEDULER_HISTORY_SPOOLER_ID
SCHEDULER_HISTORY_JOB_NAME
SCHEDULER_H_CLUSTER_MEMBER
on
on
on
on
SCHEDULER_HISTORY
SCHEDULER_HISTORY
SCHEDULER_HISTORY
SCHEDULER_HISTORY
("START_TIME"
);
("SPOOLER_ID"
);
("JOB_NAME"
);
("CLUSTER_MEMBER_ID");
CREATE TABLE SCHEDULER_ORDERS
(
"JOB_CHAIN"
varchar2(255) not null,
"ID"
varchar2(255) not null,
"SPOOLER_ID"
varchar2(100) not null,
"DISTRIBUTED_NEXT_TIME"
date,
"OCCUPYING_CLUSTER_MEMBER_ID" varchar2(100),
"PRIORITY"
integer not null,
"STATE"
varchar2(100),
"STATE_TEXT"
varchar2(100),
"TITLE"
varchar2(200),
"CREATED_TIME"
date not null,
"MOD_TIME"
date,
"ORDERING"
integer not null,
"PAYLOAD"
clob,
"INITIAL_STATE"
varchar2(100),
"RUN_TIME"
clob,
"ORDER_XML"
clob,
primary key( "SPOOLER_ID", "JOB_CHAIN", "ID" )
);
CREATE TABLE SCHEDULER_ORDER_HISTORY
(
"HISTORY_ID" integer not null,
"JOB_CHAIN" varchar2(255) not null,
"ORDER_ID"
varchar2(255) not null,
"SPOOLER_ID" varchar2(100) not null,
"TITLE"
varchar2(200),
"STATE"
varchar2(100),
"STATE_TEXT" varchar2(100),
"START_TIME" date not null,
"END_TIME"
date not null,
"LOG"
blob,
primary key( "HISTORY_ID" )
);
Software- und Organisations-Service GmbH
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
356
CREATE INDEX SCHEDULER_O_HISTORY_SPOOLER_ID on SCHEDULER_ORDER_HISTORY ( "SPOOLER_ID"
);
CREATE INDEX SCHEDULER_O_HISTORY_JOB_CHAIN on SCHEDULER_ORDER_HISTORY ( "JOB_CHAIN"
);
CREATE INDEX SCHEDULER_O_HISTORY_START_TIME on SCHEDULER_ORDER_HISTORY ( "START_TIME"
);
CREATE TABLE SCHEDULER_ORDER_STEP_HISTORY
(
"HISTORY_ID"
number(9)
not
"STEP"
number(9)
not
"TASK_ID"
number(9)
not
"STATE"
varchar2(100)
"START_TIME"
date
not
"END_TIME"
date
primary key ( "HISTORY_ID","STEP" )
);
null,
null,
null,
,
null,
,
CREATE TABLE SCHEDULER_CLUSTERS
(
"MEMBER_ID"
varchar2(100) not null,
"SCHEDULER_ID"
varchar2(100) not null,
"PRECEDENCE"
integer,
"LAST_HEART_BEAT"
integer,
"NEXT_HEART_BEAT"
integer,
"ACTIVE"
numeric(1),
"EXCLUSIVE"
numeric(1),
"DEAD"
numeric(1),
"COMMAND"
varchar2(250),
"HTTP_URL"
varchar2(100),
"DEACTIVATING_MEMBER_ID" varchar2(100),
"XML"
clob,
primary key( "MEMBER_ID" )
);
C.5 Vom JobScheduler verwendete SQL-Anweisungen für PostgreSQL
CREATE TABLE SCHEDULER_VARIABLES
(
"NAME"
varchar(100) not null,
"WERT"
integer,
"TEXTWERT" varchar(250),
primary key ( "NAME" )
);
CREATE TABLE SCHEDULER_TASKS
(
"TASK_ID"
integer not null,
"SPOOLER_ID"
varchar(100) not null,
"CLUSTER_MEMBER_ID" varchar(100),
"JOB_NAME"
varchar(255) not null,
"ENQUEUE_TIME"
timestamp,
"START_AT_TIME"
timestamp,
Software- und Organisations-Service GmbH
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
357
"PARAMETERS"
text,
"TASK_XML"
text,
primary key( "TASK_ID" )
);
CREATE TABLE SCHEDULER_HISTORY
(
"ID" integer not null,
"SPOOLER_ID"
varchar(100) not null,
"CLUSTER_MEMBER_ID" varchar(100),
"JOB_NAME"
varchar(255) not null,
"START_TIME"
timestamp not null,
"END_TIME"
timestamp,
"CAUSE"
varchar(50),
"STEPS"
integer,
"EXIT_CODE"
integer,
"ERROR"
numeric(1),
"ERROR_CODE"
varchar(50),
"ERROR_TEXT"
varchar(250),
"PARAMETERS"
text,
"LOG"
bytea,
primary key( "ID" )
)
CREATE
CREATE
CREATE
CREATE
INDEX
INDEX
INDEX
INDEX
SCHEDULER_HISTORY_START_TIME
SCHEDULER_HISTORY_SPOOLER_ID
SCHEDULER_HISTORY_JOB_NAME
SCHEDULER_H_CLUSTER_MEMBER
on
on
on
on
SCHEDULER_HISTORY
SCHEDULER_HISTORY
SCHEDULER_HISTORY
SCHEDULER_HISTORY
("START_TIME"
);
("SPOOLER_ID"
);
("JOB_NAME"
);
("CLUSTER_MEMBER_ID");
CREATE TABLE SCHEDULER_ORDERS
(
"JOB_CHAIN"
varchar(255) not null,
"ID"
varchar(255) not null,
"SPOOLER_ID"
varchar(100) not null,
"DISTRIBUTED_NEXT_TIME"
timestamp,
"OCCUPYING_CLUSTER_MEMBER_ID" varchar(100),
"PRIORITY"
integer not null,
"STATE"
varchar(100),
"STATE_TEXT"
varchar(100),
"TITLE"
varchar(200),
"CREATED_TIME"
timestamp not null,
"MOD_TIME"
timestamp,
"ORDERING"
integer not null,
"PAYLOAD"
text,
"INITIAL_STATE"
varchar(100),
"RUN_TIME"
text,
"ORDER_XML"
text,
primary key( "SPOOLER_ID", "JOB_CHAIN", "ID" )
);
CREATE TABLE SCHEDULER_ORDER_HISTORY
(
"HISTORY_ID" integer not null,
"JOB_CHAIN" varchar(255) not null,
"ORDER_ID"
varchar(255) not null,
"SPOOLER_ID" varchar(100) not null,
"TITLE"
varchar(200),
Software- und Organisations-Service GmbH
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
"STATE"
"STATE_TEXT"
"START_TIME"
"END_TIME"
"LOG"
primary key(
358
varchar(100),
varchar(100),
timestamp not null,
timestamp not null,
bytea,
"HISTORY_ID" )
);
CREATE INDEX SCHEDULER_O_HISTORY_SPOOLER_ID on SCHEDULER_ORDER_HISTORY ( "SPOOLER_ID"
);
CREATE INDEX SCHEDULER_O_HISTORY_JOB_CHAIN on SCHEDULER_ORDER_HISTORY ( "JOB_CHAIN"
);
CREATE INDEX SCHEDULER_O_HISTORY_START_TIME ON SCHEDULER_ORDER_HISTORY ( "START_TIME"
);
CREATE TABLE SCHEDULER_ORDER_STEP_HISTORY
(
"HISTORY_ID"
numeric(9)
not
"STEP"
numeric(9)
not
"TASK_ID"
numeric(9)
not
"STATE"
varchar(100)
"START_TIME"
timestamp
not
"END_TIME"
timestamp
primary key ( "HISTORY_ID","STEP" )
);
null,
null,
null,
,
null,
,
CREATE TABLE SCHEDULER_CLUSTERS
(
"MEMBER_ID"
varchar(100) not null,
"SCHEDULER_ID"
varchar(100) not null,
"PRECEDENCE"
integer,
"LAST_HEART_BEAT"
integer,
"NEXT_HEART_BEAT"
integer,
"ACTIVE"
numeric(1),
"EXCLUSIVE"
numeric(1),
"DEAD"
numeric(1),
"COMMAND"
varchar(250),
"HTTP_URL"
varchar(100),
"DEACTIVATING_MEMBER_ID" varchar(100),
"XML"
text,
primary key( "MEMBER_ID" )
);
C.6 Vom JobScheduler verwendete SQL-Anweisungen für Sybase ASE
CREATE TABLE SCHEDULER_VARIABLES
(
"NAME"
varchar(100) not null,
"WERT"
integer,
"TEXTWERT" varchar(250),
primary key ( "NAME" )
);
Software- und Organisations-Service GmbH
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
359
CREATE TABLE SCHEDULER_TASKS
(
"TASK_ID"
integer not null,
"SPOOLER_ID"
varchar(100) not null,
"CLUSTER_MEMBER_ID" varchar(100),
"JOB_NAME"
varchar(255) not null,
"ENQUEUE_TIME"
datetime,
"START_AT_TIME"
datetime,
"PARAMETERS"
text,
"TASK_XML"
text,
primary key( "TASK_ID" )
);
CREATE TABLE SCHEDULER_HISTORY
(
"ID"
integer not null,
"SPOOLER_ID"
varchar(100) not null,
"CLUSTER_MEMBER_ID" varchar(100),
"JOB_NAME"
varchar(255) not null,
"START_TIME"
datetime not null,
"END_TIME"
datetime,
"CAUSE"
varchar(50),
"STEPS"
integer,
"EXIT_CODE"
integer,
"ERROR"
numeric(1),
"ERROR_CODE"
varchar(50),
"ERROR_TEXT"
varchar(250),
"PARAMETERS"
text,
"LOG"
image,
primary key( "ID" )
);
CREATE INDEX SCHEDULER_HISTORY_START_TIME
CREATE INDEX SCHEDULER_HISTORY_SPOOLER_ID
CREATE INDEX SCHEDULER_HISTORY_JOB_NAME
CREATE INDEX SCHEDULER_H_CLUSTER_MEMBER
"CLUSTER_MEMBER_ID");
CREATE TABLE SCHEDULER_ORDERS
(
"JOB_CHAIN"
"ID"
"SPOOLER_ID"
"DISTRIBUTED_NEXT_TIME"
"OCCUPYING_CLUSTER_MEMBER_ID"
"PRIORITY"
"STATE"
"STATE_TEXT"
"TITLE"
"CREATED_TIME"
"MOD_TIME"
"ORDERING"
"PAYLOAD"
"INITIAL_STATE"
"RUN_TIME"
"ORDER_XML"
Software- und Organisations-Service GmbH
on
on
on
on
SCHEDULER_HISTORY
SCHEDULER_HISTORY
SCHEDULER_HISTORY
SCHEDULER_HISTORY
( "START_TIME" );
( "SPOOLER_ID" );
( "JOB_NAME" );
(
varchar(250) not null,
varchar(250) not null,
varchar(100) not null,
datetime,
varchar(100),
integer not null,
varchar(100),
varchar(100),
varchar(200),
datetime not null,
datetime,
integer not null,
text,
varchar(100),
text,
text,
August 2014
Vom JobScheduler verwendete SQL-Anweisungen
360
primary key( "SPOOLER_ID", "JOB_CHAIN", "ID" );
);
CREATE TABLE SCHEDULER_ORDER_HISTORY
(
"HISTORY_ID" integer not null,
"JOB_CHAIN" varchar(255) not null,
"ORDER_ID"
varchar(255) not null,
"SPOOLER_ID" varchar(100) not null,
"TITLE"
varchar(200),
"STATE"
varchar(100),
"STATE_TEXT" varchar(100),
"START_TIME" datetime not null,
"END_TIME"
datetime not null,
"LOG"
image,
primary key( "HISTORY_ID" );
);
CREATE INDEX SCHEDULER_O_HISTORY_SPOOLER_ID on SCHEDULER_ORDER_HISTORY ( "SPOOLER_ID"
);
CREATE INDEX SCHEDULER_O_HISTORY_JOB_CHAIN on SCHEDULER_ORDER_HISTORY ( "JOB_CHAIN"
);
CREATE INDEX SCHEDULER_O_HISTORY_START_TIME on SCHEDULER_ORDER_HISTORY ( "START_TIME"
);
CREATE TABLE SCHEDULER_ORDER_STEP_HISTORY
(
"HISTORY_ID"
numeric(9)
not
"STEP"
numeric(9)
not
"TASK_ID"
numeric(9)
not
"STATE"
varchar(100)
"START_TIME"
datetime
not
"END_TIME"
datetime
primary key ( "HISTORY_ID","STEP" )
);
null,
null,
null,
,
null,
,
CREATE TABLE SCHEDULER_CLUSTERS
(
"MEMBER_ID"
varchar(100) not null,
"SCHEDULER_ID"
varchar(100) not null,
"PRECEDENCE"
integer,
"LAST_HEART_BEAT"
integer,
"NEXT_HEART_BEAT"
integer,
"ACTIVE"
numeric(1),
"EXCLUSIVE"
numeric(1),
"DEAD"
numeric(1),
"COMMAND"
varchar(250),
"HTTP_URL"
varchar(100),
"DEACTIVATING_MEMBER_ID" varchar(100),
"XML"
text,
primary key( "MEMBER_ID" )
);
Software- und Organisations-Service GmbH
August 2014
Skripte in JavaScript
361
Anhang D: Skripte in JavaScript
JavaScript liegt in zwei Implementierungen vor:
<script language="JavaScript">
Spidermonkey von Mozilla, wird mit dem JobScheduler ausgeliefert.
<script language="JScript">
Microsoft JScript steht auf auf Windows-Betriebssystemen zur Verfügung (die Version ist abhängig von
Betriebssystem und Internet Explorer).
D.1 Java-Exceptions in Spidermonkey
Bei einer Exception in einem Java-Konstruktor und in einer Java-Methode werden Exception-Objekt
unterschiedlicher Klassen erzeugt. Der Fehlertext kann bei jeder Exception (auch normalen JavaScript-Exception)
so ermittelt werden:
catch( x )
{
var error_text = x + "";
}
Hier ein Beispiel, das auf die verschiedenen Exceptions Rücksicht nimmt:
function log_exception( x )
{
var msg = x + "";
if( x.getMessage
) spooler_log.error(
x.printStackTrace( java.lang.System.out );
else
if( x.message != undefined ) spooler_log.error(
msg );
else
if( x.length != undefined ) spooler_log.error(
Java-Konstruktor-Exception: " + msg );
else
spooler_log.error(
);
}
"Java-Exception: " + msg ),
"Eine JavaScript-Exception: " +
"Anscheinend eine
"Unbekannte Exception: " + msg
try
{
throw new Error( "Ein Javascript-Fehler" );
}
catch( x )
{
log_exception( x );
}
// x ist Error
try
{
var file = java.io.FileInputStream( "gibtsnicht" );
Konstruktor
Software- und Organisations-Service GmbH
// Exception im
August 2014
Skripte in JavaScript
}
catch( x )
{
log_exception( x );
}
362
// x ist Character-Array
try
{
java.lang.Class.forName( "blah" );
Java-Methode
}
catch( x )
{
log_exception( x );
}
Software- und Organisations-Service GmbH
// Exception in einer
// x ist Java-Exception
August 2014
Stichwortverzeichnis
363
Stichwortverzeichnis
A
absolute_repeat 56
action 184, 188
<add_jobs> 180
<add_order> 14, 180
after 70, 204
Agent 154
all_schedulers 205
all_steps 211
all_tasks 211
<allowed_host> 15
<answer> 206
Arbeitsverzeichnis 100
at 17, 70, 15, 181, 189, 205
<at> 16
Auftragskennung 46
Auftragsprotokoll 168
B
<base> 17
before 198
begin 64, 55
C
calling 224
category 197
cause 223, 209
central_configuration_directory
21
<check_folders> 182
class 207
<cluster> 18
cmd 187, 189
code 207
col 207
COM 148, 148
com_class 67
<commands> 19
-config 87
<config> 21
config_file 220
configuration_add_event 22
configuration_delete_event 22
configuration_directory 21
configuration_modify_event 22
<content> 24
continue_exclusive_operation 206
<copy_params> 24
count 224
create table (SQL) 348
created 216
D
Daemon 137, 137
date 26, 32
<date> 26
Software- und Organisations-Service GmbH
Datei 159
Dateiauftragsquelle 159
Dateiauftragssenke 160
Datenbank 130, 169
Datenbanktabellen 348
day 77, 27
<day> 26
db 220
db_waiting 221
debug 76
delay 27, 28, 46, 197
delay_after_error 31, 211
<delay_after_error> 27
<delay_order_after_setback> 28
delayed_after_error_task 224
<description> 29
Dienst 107, 107, 137, 137
directory 71, 31
distributed 44
E
ECMAScript 361
eMail-Versand 169
enabled 42, 211
encoding 67
end 64, 55
end_state 15, 182, 189
end_time 209
enqueued 223, 218
<environment> 29
error 146, 209
<ERROR> 207
error_code 209
error_count 27
error_state 46, 47, 213
error_text 209
Exception (Java) 361
exclusive 50
F
file 17, 58, 36
<file_based> 208
<file_order_sink> 29
<file_order_source> 30
filename 67, 208
finished 212
folder 187
force 71, 205
force_idle_timeout 40
forward_xslt_stylesheet 76
from 25, 198
G
GUI
175
H
has_description 211
Hauptprotokoll 168
heart_beat_own_timeout 18
heart_beat_timeout 18
heart_beat_warn_timeout 18
highest_level 213
Historie 130, 132
<history.entry> 209
<history> 208
history_id 202
<holiday> 32
<holidays> 32
host 16
HTML 174
HTTP Server 174
<http.authentication> 33
<http.user> 34
<http.users> 34
<http_directory> 35
<http_server> 36
I
ID 46
id 14, 181, 184, 199, 204, 220, 223,
209
idle_since 223
idle_timeout 39
ignore 61
ignore_error 59
ignore_signal 59
ignore_signals 40
ignore_unknown_hosts 68
immediately 184
in_period 211
in_process_since 216, 223
-include-path 24, 90
<include> 36
Indices (SQL) 348
-ip-address 24
is_maximum 28
J
java 76
Java-Exception 361
java_class 67
java_class_path 67
java_options 40
JavaScript 361
Job 144
job 70, 45, 182, 184, 187, 199, 200,
204, 210, 216, 225
<job.why> 182
<job> 38, 210
August 2014
Stichwortverzeichnis
364
job_chain
75, 14, 47, 181, 183, mail_on_process 214
183, 188, 196, 196, 200, 200, 202, 216 mail_on_success 214
<job_chain.modify> 183
mail_on_warning 213
<job_chain> 42, 212
mail_subject 214
<job_chain_node.end> 46
mail_to 214
<job_chain_node.job_chain> 46
max 31
<job_chain_node.modify> 183
max_non_exclusive 49, 186
<job_chain_node> 45, 212
max_order_history 201, 201, 203
<job_chains> 47
max_orders 44, 200, 202, 200, 201,
job_name 209
203
Jobprotokoll 168
max_processes 60, 194
<jobs> 48
max_task_history 200, 202, 203
min_tasks 39
K
<modify_hot_folder> 186
key 185
<modify_job> 187
<kill_task> 184
<modify_order> 188
killed 222
<modify_spooler> 189
Konfiguration 7, 17, 87, 100
<monitor> 50
Konfigurationsverzeichnis, lokales
month 52
21
<month> 52
<monthdays> 52
L
move_to 30
language 67
Mozilla 361
last_error 213
Mutex 152
last_warning 213
last_write_time 208
length 217, 218
let_run 64, 56
level 16, 213
<licence.use> 185
limit 198
line 207
live_file 36
Lock 152
lock 50, 186
<lock.remove> 186
<lock.use> 49
<lock> 48, 185
<locks> 50
-log 90
Log-Datei 168
-log-dir 90
-log-level 90, 85
<log> 213
<log_categories> 214
log_dir 23
log_file 58, 211, 216, 220, 224
Lokales Konfigurationsverzeichnis
21
loop 221
M
Mail-Versand 169
mail_bcc 214
mail_cc 214
mail_from 214
mail_on_error 213
Software- und Organisations-Service GmbH
N
name
60, 65, 49, 34, 75, 38,
73, 54, 51, 70, 44, 185, 191, 191,
193, 194, 204, 212, 223, 218
next 199
next_start_time 211, 216, 217
next_state 32, 46, 47, 212
node 37
none 210
O
<ok> 214
on_error 46
on_exit_code 19
once 63
order 38, 188, 196, 202, 211, 215
<order> 215
Order_id_space 46
<order_queue> 217
ordering 52
orders 212, 213
orders_recoverable 44
P
param 23, 58,
<param.get> 191
<param> 53, 190
<params.get> 193
<params> 54, 191, 192
password_md5 34
path 35
<payload> 193
pending 146, 211
<period> 55
pid 220, 224, 222
-port 23
prev 199
Priorität 158
priority 40, 15, 181, 189, 216, 224,
222
<process> 57
process_class 38, 195
<process_class.remove> 195
<process_class> 59, 193
<process_classes> 61, 217
<processes> 217
Protokoll 131, 168, 174
Q
<queued_task> 218
<queued_tasks> 218
R
read_error 146, 210
regex 72, 31
Remote 154
Remote Execution 154
remote_scheduler 60, 154, 194
remove 30, 211
<remove_job_chain> 195
<remove_order> 196
removed 216
<removed> 218
removing 212
repeat 64, 55, 31
replace 60, 41, 14, 181, 195
replaced 216
replacement 217
<replacement> 219
request_xslt_stylesheet 76
response_xslt_stylesheet 76
restart 206
<run_time> 61
running 146, 211
running_since 223
S
schedule 63, 196
<schedule.remove> 196
<schedule> 65
scheduler.log 168
SCHEDULER_CONFIGURATION_
DIRECTORY 57
SCHEDULER_HOST 57
SCHEDULER_JOB_CHAIN 57
SCHEDULER_JOB_CHAIN_CONFI
GURATION_DIRECTORY 57
SCHEDULER_JOB_CONFIGURATI
ON_DIRECTORY 57
August 2014
Stichwortverzeichnis
SCHEDULER_JOB_NAME 57
<scheduler_log.log_categories.reset
> 197
<scheduler_log.log_categories.set>
197
<scheduler_log.log_categories.show
> 197
SCHEDULER_ORDER_ID 57
SCHEDULER_SUPERVISOR_HOS
T 57
SCHEDULER_SUPERVISOR_POR
T 57
SCHEDULER_TASK_ID 58
SCHEDULER_TASK_TRIGGER_FI
LES 58
SCHEDULER_TCP_PORT 58
SCHEDULER_UDP_PORT 58
<schedules> 66
scheme 34
Schwarze Liste 160
<script> 66
<security> 68
Semaphor 152
Service 107, 107
<service_request> 68
<service_response> 69
setback 188, 216
setback_count 28
<settings> 69
<show_calendar> 198
<show_history> 199
<show_job> 199
<show_job_chain> 200
<show_job_chains> 201
<show_jobs> 201
<show_order> 202
<show_state> 203
<show_task> 203
single_start 64, 56
smtp 214
sos.ini 93
<sos.spooler.variable_set> 69
source 207
Sperre 152
Spidermonkey 361
<spooler> 70
spooler_id 22, 38, 220, 209
spooler_running_since 220
start_at 223, 218
<start_job> 70, 204
start_time 209
start_time_function 63
<start_when_directory_changed>
71
Software- und Organisations-Service GmbH
365
state
15, 45, 30, 47, 46, 181, 183 waiting_for_process 211
, 184, 188, 210, 212, 216, 220, 223, 208,
<waiting_jobs> 225
212
waits 221
<state> 220
warn_if_longer_than 42
state_text 211, 216
warn_if_shorter_than 42
steps 224, 209
Web Interface 175
stop_on_error 41
web_service 71, 15, 181, 205, 217,
stopped 146, 210
224
stopping 146, 210
<web_service> 73
<subprocess> 221
<weekday> 77
<subprocesses> 222
<weekdays> 78
substitute 65
what 198, 199, 200, 202, 201, 201, 202
supervisor 22
, 203, 204
suspended 189
when_holiday 64, 56
which 77
T
task 216, 223, 209, 218
<task> 223
Taskprotokoll 168
tasks 39, 211
<tasks> 224
-tcp-port 23
tcp_port 221
temporary 40, 211
<terminate> 205
text 207
time 207, 207, 221
-time-zone 24
time_zone 63
timeout 76, 39, 190, 206
timeout_at 222
title 38, 15, 44, 181, 188, 215
X
xercesImpl.jar 76
XML-Konfiguration
100
<xml_payload> 206
7, 17, 87,
U
-udp-port 23
udp_port 221
<ultimos> 72
Umgebungsvariablen 57, 57
under_construction 212
url 68
url_path 35, 75
User Interface 175
V
valid_from 65
valid_to 66
value 73, 54, 191, 197
<variable> 72
Verschachtelte Jobketten
version 220
Verzeichnis 100, 159
visible 40, 44
46
W
wait_until 220
waiting_errno 221
waiting_errno_filename 221
waiting_errno_text 221
August 2014