Composant de tâches cron crontab

Description

workerman/crontab est similaire à crontab de Linux, la différence est que workerman/crontab prend en charge la planification au niveau de la seconde.

Description 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)
|   +------------ minute (0 - 59)
+-------------- seconde (0-59)[peut être omise, si le champ des secondes est absent, la granularité de temps minimale est la minute]

Adresse du projet

https://github.com/walkor/crontab

Installation

composer require workerman/crontab

Utilisation

Étape 1 : Créer le fichier de processus app/process/Task.php

<?php
namespace app\process;

use Workerman\Crontab\Crontab;

class Task
{
    public function onWorkerStart()
    {

        // Exécuter toutes les secondes
        new Crontab('*/1 * * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Exécuter toutes les 5 secondes
        new Crontab('*/5 * * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Exécuter toutes les minutes
        new Crontab('0 */1 * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Exécuter toutes les 5 minutes
        new Crontab('0 */5 * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // 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 partie secondes est omise ici
        new Crontab('50 7 * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

    }
}

Étape 2 : Configurer le fichier de processus pour qu'il démarre avec webman

Ouvrez le fichier de configuration config/process.php, et ajoutez la configuration suivante

return [
    ....autres configurations, ceci est omis....

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

Étape 3 : Redémarrer webman

Attention : Les tâches cron ne s'exécutent pas immédiatement, toutes les tâches cron commenceront à être chronométrées à partir de la minute suivante.

Remarque

crontab n'est pas asynchrone, par exemple si un processus de tâche configure deux minuteries A et B, qui exécutent toutes deux des tâches chaque seconde, mais si la tâche A prend 10 secondes, alors B devra attendre que A soit terminé avant d'être exécutée, ce qui entraîne un retard pour B.
Si votre activité est très sensible aux intervalles de temps, il est nécessaire de placer les tâches cron sensibles dans un processus séparé pour éviter qu'elles ne soient affectées par d'autres tâches cron. Par exemple, pour la configuration suivante dans config/process.php :

return [
    ....autres configurations, ceci est omis....

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

Placez les tâches cron sensibles au temps dans process/Task1.php, tandis que les autres tâches cron se trouvent dans process/Task2.php.

Pour plus d’informations sur la configuration de config/process.php, veuillez vous référer à Personnaliser les processus