crontab Zeitplanungs-Component

Beschreibung

workerman/crontab ähnelt dem linux crontab, jedoch unterstützt workerman/crontab die zeitliche Planung auf Sekundenbasis.

Zeitbeschreibung:

0   1   2   3   4   5
|   |   |   |   |   |
|   |   |   |   |   +------ Wochentag (0 - 6) (Sonntag=0)
|   |   |   |   +------ Monat (1 - 12)
|   |   |   +-------- Tag des Monats (1 - 31)
|   |   +---------- Stunde (0 - 23)
|   +------------ Minute (0 - 59)
+-------------- Sekunde (0-59)[kann weggelassen werden, wenn die 0. Stelle nicht vorhanden ist, dann ist die kleinste Zeiteinheit die Minute]

Projektadresse

https://github.com/walkor/crontab

Installation

composer require workerman/crontab

Verwendung

Schritt Eins: Erstellen Sie die Prozessdatei app/process/Task.php

<?php
namespace app\process;

use Workerman\Crontab\Crontab;

class Task
{
    public function onWorkerStart()
    {

        // Alle eine 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";
        });

        // Alle 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";
        });

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

        // Jeden Tag um 7:50 Uhr ausführen, beachten Sie, dass hier die Sekundenstelle weggelassen wurde
        new Crontab('50 7 * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

    }
}

Schritt Zwei: Konfigurieren Sie die Prozessdatei zum Starten mit Webman

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

return [
    ....andere Konfigurationen, hier weggelassen....

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

Schritt Drei: Webman neu starten

Hinweis: Die zeitgesteuerten Aufgaben werden nicht sofort ausgeführt, alle zeitgesteuerten Aufgaben beginnen mit dem Timing erst in der nächsten Minute.

Hinweis

crontab ist nicht asynchron, zum Beispiel wenn in einem task Prozess sowohl A als auch B zwei Timer gesetzt wurden, die beide einmal pro Sekunde Aufgaben ausführen, jedoch A 10 Sekunden in Anspruch nimmt, muss B warten, bis A abgeschlossen ist, was zu einer Verzögerung bei der Ausführung von B führt. Wenn das Geschäft für Zeitintervalle sehr empfindlich ist, sollten zeitkritische Aufgaben in einem separaten Prozess ausgeführt werden, um zu verhindern, dass sie von anderen Aufgaben beeinflusst werden. Zum Beispiel sollte config/process.php wie folgt konfiguriert werden:

return [
    ....andere Konfigurationen, hier weggelassen....

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

Platziere die zeitkritischen Aufgaben in process/Task1.php und andere zeitgesteuerte Aufgaben in process/Task2.php.

Für mehr Informationen zur Konfiguration von config/process.php, siehe benutzerdefinierte Prozesse