workerman/crontab

Descrição

workerman/crontab é um programa de tarefas agendadas baseado em workerman, semelhante ao crontab do linux. workerman/crontab suporta agendamento em nível de segundo.

Para usar workerman/crontab, é necessário definir o fuso horário do PHP corretamente, caso contrário, os resultados da execução podem não corresponder às expectativas.

Explicação do Tempo

0   1   2   3   4   5
|   |   |   |   |   |
|   |   |   |   |   +------ dia da semana (0 - 6) (Domingo=0)
|   |   |   |   +------ mês (1 - 12)
|   |   |   +-------- dia do mês (1 - 31)
|   |   +---------- hora (0 - 23)
|   +------------ min (0 - 59)
+-------------- sec (0-59)[pode ser omitido, se não houver o campo 0, a granularidade mínima de tempo é em minutos]

Instalação

composer require workerman/crontab

Exemplo

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

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

// Define o fuso horário para evitar que os resultados da execução não correspondam às expectativas
date_default_timezone_set('PRC');

$worker->onWorkerStart = function () {
    // Executa no primeiro segundo de cada minuto.
    new Crontab('1 * * * * *', function(){
        echo date('Y-m-d H:i:s')."\n";
    });
    // Executa às 7:50 todos os dias, note que aqui o campo de segundos foi omitido.
    new Crontab('50 7 * * *', function(){
        echo date('Y-m-d H:i:s')."\n";
    });
};

Worker::runAll();

Atenção
Tarefas agendadas não serão executadas imediatamente; todas as tarefas agendadas começam a contar a partir do minuto seguinte.
Assim como os temporizadores do workerman, todas as tarefas são executadas no processo atual.
Se os corrotinas swoole/swow não estiverem habilitadas, se uma tarefa não for concluída até o próximo ciclo de execução, a próxima tarefa aguardará a conclusão da tarefa atual, resultando em um atraso na execução da nova tarefa.
Se as corrotinas swoole/swow estiverem habilitadas, se a tarefa anterior não foi concluída, a próxima tarefa pode ser executada imediatamente, não aguardando na fila.

Interface

Crontab::destroy()

Destrói o temporizador

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