workerman/crontab

Descripción

workerman/crontab es un programa de tareas programadas basado en workerman, similar al crontab de Linux. workerman/crontab soporta programación a nivel de segundos.

Para usar workerman/crontab, primero debe configurarse la zona horaria de PHP, de lo contrario, los resultados de ejecución pueden no coincidir con lo esperado.

Explicación del tiempo

0   1   2   3   4   5
|   |   |   |   |   |
|   |   |   |   |   +------ día de la semana (0 - 6) (domingo=0)
|   |   |   |   +------ mes (1 - 12)
|   |   |   +-------- día del mes (1 - 31)
|   |   +---------- hora (0 - 23)
|   +------------ min (0 - 59)
+-------------- sec (0-59)[opcional, si no hay el campo de 0, la mínima granularidad de tiempo es minutos]

Instalación

composer require workerman/crontab

Ejemplo

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

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

// Establecer la zona horaria para evitar resultados de ejecución inconsistentes
date_default_timezone_set('PRC');

$worker->onWorkerStart = function () {
    // Ejecutar en el primer segundo de cada minuto.
    new Crontab('1 * * * * *', function(){
        echo date('Y-m-d H:i:s')."\n";
    });
    // Ejecutar a las 7:50 de cada día, nota aquí que se ha omitido el campo de segundos.
    new Crontab('50 7 * * *', function(){
        echo date('Y-m-d H:i:s')."\n";
    });
};

Worker::runAll();

Notas
Las tareas programadas no se ejecutarán de inmediato, todas las tareas programadas comenzarán a contar sólo en el siguiente minuto.
Al igual que el temporizador de workerman, todas las tareas se ejecutan en el proceso actual.
Si no se han habilitado las corrutinas de swoole/swow, si una tarea no se completa antes del siguiente ciclo de ejecución, esperará a que se complete la tarea actual, y la ejecución de la nueva tarea se retrasará.
Si las corrutinas de swoole/swow están habilitadas, si la tarea anterior no se ha completado, la siguiente tarea podría ejecutarse de inmediato, sin esperar en cola.

Interfaz

Crontab::destroy()

Destruir el temporizador

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