workerman/crontab

Beschreibung

workerman/crontab ist ein zeitgesteuertes Programm, das auf Workerman basiert und ähnlich wie das Linux-Tool crontab funktioniert. workerman/crontab unterstützt zeitgesteuerte Aufgaben bis zur Sekunde.

Um workerman/crontab zu verwenden, muss die Zeitzone von PHP korrekt eingestellt sein, da sonst die Ergebnisse von den Erwartungen abweichen können.

Zeitbeschreibung

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 die Sekunde nicht angegeben ist, beträgt die kleinste Zeiteinheit eine Minute]

Installation

composer require workerman/crontab

Beispiel

<?php
use Workerman\Worker;
require __DIR__ . '/vendor/autoload.php';

use Workerman\Crontab\Crontab;
$worker = new Worker();

// Zeitzone festlegen, um Abweichungen zwischen den Ergebnissen und den Erwartungen zu vermeiden
date_default_timezone_set('PRC');

$worker->onWorkerStart = function () {
    // Ausführen bei der 1. Sekunde jeder Minute.
    new Crontab('1 * * * * *', function(){
        echo date('Y-m-d H:i:s')."\n";
    });
    // Täglich um 7:50 Uhr ausführen, beachten Sie, dass die Sekunde hier weggelassen wurde.
    new Crontab('50 7 * * *', function(){
        echo date('Y-m-d H:i:s')."\n";
    });
};

Worker::runAll();

Hinweis
Zeitgesteuerte Aufgaben werden nicht sofort ausgeführt, alle zeitgesteuerten Aufgaben beginnen erst in der nächsten Minute zu zählen.
Ähnlich wie bei den Workerman-Timern werden alle Aufgaben im aktuellen Prozess ausgeführt.
Wenn die Swoole/SWOW-Kooperation nicht aktiviert ist und die Aufgabe nicht rechtzeitig abgeschlossen wird, muss auf die Beendigung der aktuellen Aufgabe gewartet werden, bevor die neue Aufgabe beginnt. Dies führt zu Verzögerungen bei der Ausführung neuer Aufgaben.
Wenn die Swoole/SWOW-Kooperation aktiviert ist, kann die nächste Aufgabe sofort ausgeführt werden, auch wenn die vorherige Aufgabe nicht abgeschlossen ist; sie wird nicht in die Warteschlange gesetzt.

Schnittstelle

Crontab::destroy()

Zerstört den Timer

$crontab = new Crontab('1 * * * * *', function(){
    echo date('Y-m-d H:i:s')."\n";
});
$crontab->destroy();