Crontab-Zeitplanungskomponente

Beschreibung

workerman/crontab ist ähnlich wie Linux crontab, mit dem Unterschied, dass es die Planung im Sekundentakt unterstützt.

Zeitformat:

0   1   2   3   4   5
|   |   |   |   |   |
|   |   |   |   |   +------ day of week (0 - 6) (Sunday=0)
|   |   |   |   +------ month (1 - 12)
|   |   |   +-------- day of month (1 - 31)
|   |   +---------- hour (0 - 23)
|   +------------ min (0 - 59)
+-------------- sec (0-59)[optional; wenn 0. Stelle fehlt, ist die Mindestgranularität die Minute]

Projekt-URL

https://github.com/walkor/crontab

Installation

composer require workerman/crontab

Verwendung

Schritt 1: Prozessdatei app/process/Task.php erstellen

<?php
namespace app\process;

use Workerman\Crontab\Crontab;

class Task
{
    public function onWorkerStart()
    {

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

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

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

    }
}

Schritt 2: Prozess mit webman starten konfigurieren

Konfigurationsdatei config/process.php öffnen und Folgendes ergänzen:

return [
    ....andere Konfiguration ausgelassen....

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

Schritt 3: webman neu starten

Hinweis: Geplante Aufgaben laufen nicht sofort; sie beginnen erst ab der nächsten Minute.

Hinweise

Crontab ist nicht asynchron. Beispiel: Ein task-Prozess hat zwei Timer A und B, beide laufen jede Sekunde. Dauert Aufgabe A 10 Sekunden, muss B warten, bis A fertig ist – dadurch verzögert sich B.
Ist die Logik zeitkritisch, sollten zeitkritische Aufgaben in eigenen Prozessen laufen, damit andere sie nicht beeinträchtigen. Beispiel für config/process.php:

return [
    ....andere Konfiguration ausgelassen....

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

Zeitkritische Aufgaben in process/Task1.php, übrige in process/Task2.php.

Mehr zu config/process.php siehe Benutzerdefinierte Prozesse.