Cronjob (Geplante Aufgabe)

Geplante Aufgaben werden in bestimmten zeitlichen Abständen ausgeführt. Sie dienen der kontinuierlichen Verarbeitung von Daten. Ein Cronjob wird als Komponente angelegt. Erstellen Sie hierzu die Datei Cron.php in dem Ordner Components eines beliebigen Moduls. Die darin befindliche Klasse Cron muss die Methode execute() besitzen. Diese wird automatisch durch den zugehörigen Component-Loader ausgeführt, wenn die Zeit-gesteuerten Aufgaben ausgeführt werden.

Zeitsteuerung

Die Klasse Cron_model aus dem Namespace Modules\CRM_Core\Models enthält Methoden zur Zeitsteuerung. Diese Zeitsteuerung wird benötigt, wenn der Job nicht mit jeder Ausführung der Zeit-gesteuerten Aufgaben, sondern zeitversetzt ausgeführt werden sollen.

Aufgabe registrieren

Jede neue Aufgabe muss zunächst registriert werden. Die Methode addCronTask(array $data): int fügt eine neue Aufgabe zur Datenbank hinzu und gibt die ID der neuen Aufgabe zurück.

<?php
$cronModel = new Cron_model();
$cronModel->addCronTask([
    'cron_task' => 'Sample',
    'execution_period' => 5, 
]);

Aufgabe updaten

Eine Aufgabe kann durch den Aufruf der Methode updateCronTask(int $id, array $data): int verändert werden. Die Methode verändert die Daten der Aufgabe in der Datenbank und gibt die ID der Aufgabe zurück.

<?php
$cronModel = new Cron_model();
$cronModel->updateCronTask(3, [
    'execution_period' => 15, 
]);

Aufgabe löschen

Eine Aufgabe kann durch den Aufruf der Methode deleteCronTask(int $id): bool aus der Datenbank entfernt werden (z.B. wenn ein Modul inkl. seiner Cron-Komponente aus dem System gelöscht wird).

<?php
$cronModel = new Cron_model();
$cronModel->deleteCronTask(3);

Aufgabe auf nächste Ausführung prüfen

Aufgaben können auf eine mögliche nächste Ausführung geprüft werden. Wurde die Aufgabe vor weniger als der in execution_period angegebenen Anzahl an Minuten bereits ausgeführt, so gibt die Methode cronTaskCanExecute(string $name): bool false zurück.

<?php
$cronModel = new Cron_model();
if ($cronModel->cronTaskCanExecute('Sample')) {
    //TODO: Implement cronjob functionality for "Sample" module
}

Cron.php

Herunterladen: Cron.php

<?php

namespace Modules\Core\Components;

use Modules\CRM_Core\Models\Cron_model;

/**
 * Class Cron
 *
 * Module specific implementation of cronjob method. Implemented
 * respectively for the "Sample" module of the application.
 */
class Cron
{
    private $manager;
  
    public function __construct()
    {
        $this->manager = new Cron_model();
    }
  
    /**
     * Function called upon cronjob execution.
     */
    public function execute()
    {
        if ($this->manager->cronTaskCanExecute('Sample')) {
            //TODO: Implement cronjob functionality for "Sample" module
        }
    }
}