workerman/crontab

Description

workerman/crontab est un programme de tâches planifiées basé sur Workerman, similaire à crontab de Linux. workerman/crontab prend en charge une planification à la seconde.

Pour utiliser workerman/crontab, il est nécessaire de configurer le fuseau horaire de PHP, sinon les résultats d'exécution peuvent ne pas correspondre aux attentes.

Explication du temps

0   1   2   3   4   5
|   |   |   |   |   |
|   |   |   |   |   +------ jour de la semaine (0 - 6) (dimanche=0)
|   |   |   |   +------ mois (1 - 12)
|   |   |   +-------- jour du mois (1 - 31)
|   |   +---------- heure (0 - 23)
|   +------------ min (0 - 59)
+-------------- sec (0-59)[peut être omis, si aucune position 0, la granularité temporelle minimale est la minute]

Installation

composer require workerman/crontab

Exemple

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

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

// Définir le fuseau horaire pour éviter les incohérences dans les résultats
date_default_timezone_set('PRC');

$worker->onWorkerStart = function () {
    // Exécuter à la première seconde de chaque minute.
    new Crontab('1 * * * * *', function(){
        echo date('Y-m-d H:i:s')."\n";
    });
    // Exécuter à 7h50 chaque jour, notez que la position des secondes est omise ici.
    new Crontab('50 7 * * *', function(){
        echo date('Y-m-d H:i:s')."\n";
    });
};

Worker::runAll();

Attention
Les tâches planifiées ne s'exécutent pas immédiatement, toutes les tâches planifiées commenceront à être chronométrées à la minute suivante.
Comme pour le minuteur Workerman, toutes les tâches s'exécutent dans le processus actuel.
Si les coroutines swoole/swow ne sont pas activées, si une tâche n'est pas terminée à l'échéance suivante, elle attendra la fin de la tâche actuelle, et l'exécution de la nouvelle tâche sera retardée.
Si les coroutines swoole/swow sont activées, si la tâche précédente n'est pas terminée, la tâche suivante peut s'exécuter immédiatement, sans attendre en file d'attente.

Interface

Crontab::destroy()

Détruire le minuteur

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