Eigene Cronjobs im Plugin-Code pflegen

Voraussetzungen

Im Plugin-ZIP muss die Datei cron/crontab enthalten sein. Es ist dabei unerheblich, ob darin bereits ein cron-Job enthalten ist oder nicht. 

Das crontab-File wird bei der Installation nach $lbhomedir/system/cron/cron.d/<pluginname> kopiert. Mit diesem Pfad kann im Plugin dann auch lesend auf die Datei zugegriffen werden, um die aktuellen Cronjobs auszulesen.

Erzeugen von Cron-Einträgen

Aus Sicherheitsgründen ist es dem Plugin nicht möglich, direkt in die Datei  $lbhomedir/system/cron/cron.d/<pluginname> zu schreiben.

Zum Erzeugen eines neuen crontab-Files während der Laufzeit muss 

  1. ein temporäres Crontab-File erzeugt werden (z.B. in /tmp/) und
  2. mit sudo $lbhomedir/sbin/installcrontab.sh <pluginname> <crontabfile> das neue File installiert werden.

Das Crontab-File enthält den ausführenden Benutzer (siehe unten), der von der installcrontab-Routine jedoch immer mit loxberry ersetzt wird. Cronjobs können daher nicht direkt mit root ausgeführt werden.

Wenn es notwendig ist, dass ein Script aus einem Cronjob als root ausgeführt wird, muss das aufgerufene Script im sudoers-File vorhanden sein (Plugin-Interface V2). Aus dem Cronjob muss dieses mit sudo aufgerufen werden.

Syntax

Achtung, die Syntax für Cronjobs enthält den User, die Syntax ist:

minute hour day_of_month month day_of_week user command

Als "User" muss loxberry verwendet werden.

Beispiel

#minute hour day_of_month month day_of_week user command
0 */6 * * * loxberry $LBPCGI/meinplugin/machwas.sh

Das Plugin ist für die Pflege des Files selbst verantwortlich. Das Schreiben des Files muss immer, wie oben beschrieben, über eine temporäre Datei und der Prozedur installcrontab.sh erfolgen.

Bei einem Update des Plugins wird das Crontab-File nicht gelöscht.

Beim Deinstallieren des Plugins wird die Datei gelöscht.

Perl

Zur Pflege des Crontab-Files kann das Modul Config::Crontab verwendet werden.

use Config::Crontab;
my $cron = new Config::Crontab;
$cron->system(1); ## Wichtig, damit der User im File berücksichtigt wird
$cron->read( -file => "$lbhomedir/system/cron/cron.d/$lbpplugindir" );

Manuell

Ein hilfreicher Link ist der Online-Crontab-Generator unter: https://crontab-generator.org/ 

Achtung! Der Online-Generator fügt den notwendigen Benutzernamen nicht vor das Kommando in die Syntax ein. Diesen musst Du manuell hinzufügen (siehe oben!).