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();