workerman/crontab

Descrizione

workerman/crontab è un programma di task scheduling basato su workerman, simile al crontab di linux. workerman/crontab supporta la pianificazione a livello di secondi.

Per utilizzare workerman/crontab, è necessario prima impostare il fuso orario di PHP, altrimenti il risultato dell'esecuzione potrebbe non essere conforme alle aspettative.

Spiegazione del tempo

0   1   2   3   4   5
|   |   |   |   |   |
|   |   |   |   |   +------ giorno della settimana (0 - 6) (Domenica=0)
|   |   |   |   +------ mese (1 - 12)
|   |   |   +-------- giorno del mese (1 - 31)
|   |   +---------- ora (0 - 23)
|   +------------ min (0 - 59)
+-------------- sec (0-59)[opzionale, se non presente, la minima unità di tempo è il minuto]

Installazione

composer require workerman/crontab

Esempio

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

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

// Imposta il fuso orario, per evitare risultati incoerenti
date_default_timezone_set('PRC');

$worker->onWorkerStart = function () {
    // Esegui al primo secondo di ogni minuto.
    new Crontab('1 * * * * *', function(){
        echo date('Y-m-d H:i:s')."\n";
    });
    // Esegui alle 7:50 di ogni giorno, nota che qui è stata omessa la parte dei secondi.
    new Crontab('50 7 * * *', function(){
        echo date('Y-m-d H:i:s')."\n";
    });
};

Worker::runAll();

Attenzione
I task programmati non vengono eseguiti immediatamente; tutti i task pianificati iniziano a contare dall'inizio del minuto successivo.
Come con il timer di workerman, tutti i task vengono eseguiti nel processo corrente.
Se non è stata attivata la coroutine swoole/swow, se un task non è terminato all'inizio del ciclo di esecuzione successivo, aspetterà che il task corrente sia completato, il nuovo task verrà eseguito in ritardo.
Se sono attive le coroutine swoole/swow, se un task precedente non è completato, il task successivo potrebbe essere eseguito immediatamente, senza attendere in coda.

Interfaccia

Crontab::destroy()

Distruggi il timer

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