2021.06

Cronjob

Für das zeitbasierte Ausführen von bestimmten Aufgaben gibt es das Cronjob-Modul.

Ein Kommando zu einem bestimmten Zeitpunkt ausführen

Mit dem MCRCommandCronJob lassen sich beliebige MyCoRe-Kommandos ausführen.

1
2
3
4
MCR.Cronjob.Jobs.SitemapBuild=org.mycore.mcr.cronjob.MCRCommandCronJob
MCR.Cronjob.Jobs.SitemapBuild.Command=build google sitemap
MCR.Cronjob.Jobs.SitemapBuild.Cron=0 2 * * *
#MCR.Cronjob.Jobs.SitemapBuild.CronType=

Beispiel-Konfiguration für SitemapBuild:

Mögliche Werte für das Property CronType sind die enum Konstanten in CronType und der Standardwert ist UNIX. In dem Property Cron muss der Zeitpunkt definiert werden. Eine gute Hilfe für Unix ist die Seite crontab.guru. Die beiden Properties sind für alle Cronjobs allgemein gültig. Das Property Command ist spezifisch für den MCRCommandCronJob und legt das Kommando fest, welches ausgeführt werden soll.

Einen eigenen Cronjob implementieren

Wenn sich ein Cronjob nicht auf ein einfaches Kommando abbilden lässt, oder es nicht gewünscht ist ein Kommando zu haben, dann gibt es die Möglichkeit, die Klasse MCRCronjob zu erweitern.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class MyCronJob extends MCRCronjob {

    public static final Logger LOGGER = LogManager.getLogger();

    private String foo;

    @Override
    public void runJob() {
        getProcessable().setStatus(MCRProcessableStatus.processing);
        getProcessable().setProgress(0);

        // do stuff

        getProcessable().setProgress(100);
    }

    public String getFoo() {
        return this.foo;
    }

    @MCRProperty(name = "Foo")
    public void setFoo(String foo) {
        this.foo = foo;
    }

    @Override
    public String getDescription() {
        return "Does something with " + getFoo();
    }
}
1
2
3
MCR.Cronjob.Jobs.MyOwnJob=de.my.cronjob.MyCronJob
MCR.Cronjob.Jobs.MyOwnJob.Foo=bar
MCR.Cronjob.Jobs.MyOwnJob.Cron=0 2 * * * 

Die Methode #runJob() muss implementiert werden und wird ausgeführt, wenn der im Cron Property definierte Zeitpunkt erreicht ist. Die Methode #getDescription() wird ausgelesen, um in der Webtools-Processable-Ansicht eine Beschreibung auszugeben.