Crontab-Zeitplanungskomponente

Workerman/Crontab

Erklärung

Workerman/Crontab ist ähnlich wie der Linux-Crontab, mit dem Unterschied, dass Workerman/Crontab die sekundengenaue Zeitplanung unterstützt.

Zeiterklärung:

0   1   2   3   4   5
|   |   |   |   |   |
|   |   |   |   |   +------ Wochentag (0 - 6) (Sonntag=0)
|   |   |   |   +------ Monat (1 - 12)
|   |   |   +-------- Tag im Monat (1 - 31)
|   |   +---------- Stunde (0 - 23)
|   +------------ Minute (0 - 59)
+-------------- Sekunde (0-59) [kann weggelassen werden, wenn 0 nicht vorhanden ist, ist minimaler Zeitabstand Minute]

Projektadresse

https://github.com/walkor/crontab

Installation

composer require workerman/crontab

Verwendung

Schritt 1: Neues Prozessdokument "process/Task.php" erstellen

<?php
namespace process;

use Workerman\Crontab\Crontab;

class Task
{
    public function onWorkerStart()
    {

        // Alle Sekunde ausführen
        new Crontab('*/1 * * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Alle 5 Sekunden ausführen
        new Crontab('*/5 * * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Jede Minute ausführen
        new Crontab('0 */1 * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Alle 5 Minuten ausführen
        new Crontab('0 */5 * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Jede Minute am Anfang ausführen
        new Crontab('1 * * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Täglich um 7:50 Uhr ausführen, achten Sie darauf, dass hier die Sekunde weggelassen wurde
        new Crontab('50 7 * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

    }
}

Schritt 2: Konfigurieren Sie das Prozessdokument, das mit dem Webman gestartet wird

Öffnen Sie die Konfigurationsdatei config/process.php und fügen Sie die folgende Konfiguration hinzu:

return [
    ....andere Konfigurationen, hier ausgelassen....

    'task'  => [
        'handler'  => process\Task::class
    ],
];

Schritt 3: Webman neu starten

Hinweis: Geplante Aufgaben werden nicht sofort ausgeführt. Alle geplanten Aufgaben beginnen erst in der nächsten Minute mit der Ausführung.

Erklärung

Crontab ist nicht asynchron. Zum Beispiel, wenn ein Task-Prozess A und B zwei Zeitgeber setzt, die beide jede Sekunde eine Aufgabe ausführen, und A-Aufgabe 10 Sekunden dauert, muss B auf die Fertigstellung von A warten, bevor sie ausgeführt werden kann, was zu Verzögerungen bei der Ausführung von B führt.
Wenn das Geschäft empfindlich auf Zeitintervalle reagiert, sollten die sensitiven geplanten Aufgaben in einem separaten Prozess ausgeführt werden, um sicherzustellen, dass sie nicht von anderen geplanten Aufgaben beeinflusst werden. Zum Beispiel, konfigurieren Sie in config/process.php wie folgt:

return [
    ....andere Konfigurationen, hier ausgelassen....

    'task1'  => [
        'handler'  => process\Task1::class
    ],
    'task2'  => [
        'handler'  => process\Task2::class
    ],
];

Legen Sie die zeitkritischen geplanten Aufgaben in process/Task1.php fest und die anderen geplanten Aufgaben in process/Task2.php.

Mehr

Für weitere Informationen zur Konfiguration von config/process.php siehe Benutzerdefinierte Prozesse.