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