Durchsuchbare Dokumentation aufrufen

Zurück zur Dokumentationsübersicht

JavaScript per CronJob ausführen

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

Unterschied zwischen CronJob und Worker


Ziehen Sie einen CronJob einem Worker vor, da ein Worker das System laufend mit Suchanfragen belastet. Ein CronJob wird dagegen zeitlich eingetaktet. Sie können diesen etwa einmal pro Stunde laufen lassen. Der CronJob führt dann intern eine Query aus, ähnlich wie es der Worker machen würde.


Wann sollten Sie einen CronJob benutzen?
Wenn es nicht zeitkritisch ist und es in Ordnung ist, dass die Abarbeitung sequenziell passiert.


Wann sollten Sie einen Worker benutzen?
Wenn es zeitnah passieren soll oder wenn mehrere Threads parallel arbeiten sollen. 

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