Open Source Dokumentenmanagement
Dokumentation

Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht

Navigation: Dokumentationen agorum core > agorum core JavaScript-API


JavaScript per CronJob ausführen

Mithilfe eines CronJobs führen Sie ein JavaScript in definierten Abständen aus.

Unterschied zwischen CronJob, Task und Worker


CronJob

Ein CronJob ist eine Konfiguration für die regelmäßige Ausführung eines JavaScripts in der MetaDB. Die Log-Informationen für die Überwachung eines CronJobs finden Sie im Support Tool im Bereich Active Folder.

Task

Ein Task wird mithilfe der JavaScript-Bibliothek agorum.task entwickelt. Die Bibliothek erlaubt es, Aufgaben zu automatisieren, und einmalig, zu einem geplanten Zeitpunkt oder regelmäßig auszuführen. Zudem können Tasks parallel ausgeführt werden. Im Workspace bekommen Sie einen Überblick über alle vorhandenen Tasks und können den nächsten Ausführungszeitpunkt einsehen. Die Überwachung erfolgt über das Support Tool im Bereich Base System.

Worker

Ein Worker ist eine Einstellung im Support Tool, die häufig auf einer Suchanfrage basiert. Die Suchtreffer werden mit einem JavaScript weiterverarbeitet. Die Überwachung erfolgt über das Support Tool im Bereich Worker. Im Gegensatz zu CronJobs und Tasks werden Worker sofort ausgeführt, sobald die Situation zutrifft, die den Worker auslöst, etwa wenn ein Suchtreffer gefunden wird. Durch die Suchanfragen kann das System belastet werden. Sie sollten Worker also vor allem dann verwenden, wenn die Änderungen wirklich sofort nach Eintreten einer bestimmten Bedingung durchgeführt werden müssen und nicht auf den nächsten Zeitpunkt einer regelmäßigen Ausführung durch einen CronJob oder Task warten können.

 

Kriterium Task/CronJob Worker
Einrichtung Script-Erstellung durch Entwickler Oberflächengestützte Einrichtung im Support Tool
Verwendungszweck Einmalige oder wiederkehrende Aufgaben. Unmittelbare Ausführung bei Eintreten der Ausgangssituation.
Parallelität Tasks mit verschiedenen IDs können parallel ausgeführt werden. Wiederkehrende, identische Aufgaben werden nach einander gestartet. CronJobs können nur sequenziell ausgeführt werden. Parallele Ausführung mehrer Worker konfigurierbar.
Zeitliche Steuerung Konfigurierbare zeitliche Taktung, bei Nichtverfügbarkeit des Systems wird der Task zum nächstmöglichen Zeitpunkt ausgeführt. Unmittelbare Ausführung.
Überwachung Fehler im agorum core support tool im Log sichtbar. Fehler im agorum core support tool im Log sichtbar.

Wann benutze ich CronJob, Task oder Worker?

Wann sollten Sie einen CronJob oder einen Task benutzen?
CronJobs sind optimal für regelmäßige, sequenzielle Aufgaben, die in festen Intervallen ausgeführt werden. Tasks eignen sich ebenfalls für wiederkehrende oder einmalige Aufgaben und können zusätzlich parallel ausgeführt werden. Sie bieten Flexibilität und eine gute Fehlerbehandlung.

Wann sollten Sie einen Worker benutzen?
Worker eignen sich für zeitnahe und parallele Aufgaben, insbesondere wenn kontinuierliche Überwachung und sofortige Reaktion erforderlich sind. Sie belasten das System jedoch durch laufende Suchanfragen.

 

Einen CronJob anlegen


  1. Öffnen Sie links in der Seitenleiste Administration und dann MetaDB.
  2. Öffnen Sie den Pfad:
    MAIN_MODULE_MANAGEMENT/cronjob/control
  3. Legen Sie eine Property-Gruppe an:
    [ <Ihr Konfigurationsprojekt> ] 
  4. Legen Sie über  ein Property-Bundle mit einem beliebigen Namen an.
  5. Öffnen Sie das neue Property-Bundle mit einem Doppelklick.
  6. Legen Sie über  jeweils nacheinander folgende Property-Entrys an.

    Class
    Definiert die Klasse.

    CronTime
    Bestimmt, um welche Uhrzeit oder in welchen Abständen der CronJob Daten ausgibt und ist frei konfigurierbar.

    ParameterNames
    Definiert den Namen des Parameters.

    ParameterValues
    Definiert den Wert des Parameter (hier: Pfad zum verwendeten Skript).
  7. Klicken Sie pro Property-Entry auf Speichern.
  8. Erweitern Sie die Datei export.yml Ihres Konfigurationsprojektes um den MetaDB-Eintrag.

Property-Entrys

Name Datentyp Wert (String)
Class Zeichenkette (String) agorum.roi.cron.JSCronTaskFactory
CronTime Zeichenkette (String) Beispiele:

Immer um 11 Uhr
0 11 * * *

Minütlich
* * * * *

Eingabemöglichkeiten per Generator finden Sie im Web unter dem Stichwort crontime generator.

Hinweis: Sollte der CronJob länger laufen als hier angegeben, startet der CronJob seinen Lauf nicht erneut. Wenn Sie etwa eine minütliche Ausführung angeben, der CronJob für die Abarbeitung der Aufgaben jedoch etwa 5 Minuten benötigt, startet der nächste Lauf erst, nachdem der vorherige Lauf beendet wurde. Der CronJob startet also nicht erneut 4 Mal während dieser Zeit.

ParameterNames Zeichenkette (String) Beispiel
JS
ParameterValues Zeichenkette (String) Beispiel
/agorum/roi/customers/agorum/js/<JavaScript-Datei.js>

Einen CronJob als Worker-Ersatz verwenden


Einen CronJob können Sie so verwenden, dass er wie ein QueryScript-Worker funktioniert. Hierfür passen Sie das JavaScript an.

Beispiel eines CronJob-JavaScripts

Im folgenden JavaScript für einen CronJob wird ein Worker nachgebildet. Der CronJob soll Objekte erkennen, aus einem Ordner herausnehmen und in einen anderen Ordner ablegen:

Hinweis: Bei der Query sollten Sie stets ein nicht vererbtes Metadatum prüfen, da bei vererbten Metadaten aufgrund einer Asynchronität ein zeitlicher Versatz existieren könnte.

/* global object */

// this is called from a cronjob
let objects = require('common/objects');
let transaction = require('common/transaction');
let metadata = require('common/metadata');

// this is a sample query, put in any query, that should match the objects, that should be handled by this cronjob
// after the cronjob has finished, you have to do something, that marks the object, that it is not found by the
// the query, otherwise it gets handled again.
// This is just an example. You can use any other query, like searching for the existance of a metadata-value or anyhting else...
let query = 'inpath:${ID:/agorum/roi/Files/incoming} NOT agorum_file_processed';

// the output folder
let target = objects.find('/agorum/roi/Files/done');

objects.query(query).iterate('uuid', data => {
  transaction(() => {
    let object = objects.tryFind(data.uuid);
    
    // check if object still exists
    if (object) {
      // .. do something with the object ..

      // move it away from incoming-folder, so that it is not found next time, the cronjob runs
      // remove from all parents
      objects.remove(object);
    
      // move to done folder
      objects.add(object, [ target ]);
      metadata({agorum_file_processed: true}).save(object);
    }
  });
});

Hinweis: Fehlermeldungen, die während der Ausführung des CronJobs auftreten, erscheinen im Serverlog und nicht im agorum core support tool.

Parameter 

Parameter Beschreibung
query Definiert den Pfad, aus dem das System die Dateien herausholt.
target Definiert den Pfad, in den das System die Dateien verschiebt.
object Definiert das Objekt, das das System durch eine UUID finden soll.

 

Beispiel-Worker zum Beispiel-CronJob