Agendador de Tarefas PHP: gerenciamento de tarefas periódicas no código
No desenvolvimento web moderno, surge frequentemente a necessidade de executar ações repetitivas: envio de newsletters por e-mail, limpeza de cache, geração de relatórios, sincronização de dados com APIs externas. Tradicionalmente, o cron do sistema (crontab) é usado para isso, mas ele requer acesso ao shell e configuração no servidor. A biblioteca Agendador de Tarefas PHP (Task Scheduler) permite implementar um comportamento semelhante ao cron diretamente em uma aplicação PHP, sem a necessidade de editar o crontab. Esta é uma solução ideal para hospedagem compartilhada, ambientes conteinerizados (Docker) ou projetos que precisam de lógica de agendamento flexível a partir do código.
Principais recursos
A biblioteca fornece uma interface fluente para definir tarefas e seus agendamentos. Principais funções:
- Definição flexível de agendamento – suporte para expressões cron, intervalos (a cada N minutos, horas, dias), horário específico (diariamente às 03:00).
- Execução de comandos e funções de retorno (callbacks) – é possível executar comandos shell, métodos de classes ou funções anônimas.
- Gerenciamento de filas – integração com filas (ex.: RabbitMQ, Redis) para execução adiada.
- Registro e notificações – suporte integrado para logs de execução, envio de erros por e-mail ou para o Sentry.
- Segurança – prevenção de execução paralela da mesma tarefa (mutex).
Instalação e configuração
A instalação é feita via Composer:
composer require vendor/task-schedulerApós a instalação, é necessário criar um arquivo scheduler.php, que será executado pelo cron do sistema (uma vez por minuto). Dentro do arquivo, todas as tarefas são configuradas:
<?phprequire_once __DIR__ . '/vendor/autoload.php';
use Scheduler\\Scheduler;use Scheduler\\Task;
$scheduler = new Scheduler();
// Tarefa 1: limpeza de cache a cada 30 minutos$scheduler->add(new Task('cache:clear', function() { // Lógica de limpeza de cache echo "Cache limpo em " . date('Y-m-d H:i:s') . PHP_EOL;}), '*/30 * * * *');
// Tarefa 2: envio de newsletter todos os dias às 9:00$scheduler->add(new Task('send:newsletter', 'php artisan newsletter:send'), '0 9 * * *');
// Tarefa 3: atualização de estatísticas a cada 5 minutos, mas não mais que 1 vez a cada 10 minutos$scheduler->add(new Task('update:stats', function() { // Operação longa sleep(5);}), '*/5 * * * *', [ 'mutex' => true, // proteção contra execução paralela 'timeout' => 300 // tempo máximo de execução (5 minutos)]);
$scheduler->run();?>No crontab do sistema, é adicionada a linha:
* * * * * php /path/to/scheduler.php >> /dev/null 2>&1Agora, o script PHP será executado a cada minuto e verificará quais tarefas precisam ser executadas.
Exemplos de uso
1. Agendador simples com callback
<?php$scheduler->add(new Task('greet', function() { echo "Olá, Mundo!";}), '*/1 * * * *'); // A cada minuto2. Execução de comando Artisan do Laravel
<?php$scheduler->add(new Task('reports:generate', 'php artisan reports:generate --force'), '0 2 * * 1'); // Toda segunda-feira às 2:003. Uso de intervalos em vez de cron
<?phpuse Scheduler\\Interval;
$scheduler->add(new Task('backup:db', 'mysqldump -u root db > backup.sql'), Interval::everyHour());// ou$scheduler->add(new Task('cleanup:logs', 'rm -rf /var/log/old/*'), Interval::everyDays(7));4. Execução adiada através de fila
<?php$scheduler->add(new Task('process:payments', function() use ($queue) { $queue->push(new Também na biblioteca
NLog para C# (.NET): guia completo com exemplos práticos
Testes em PHP: visão geral de frameworks e ferramentas (PHPUnit, Pest, Codeception)
Cython com C++: guia completo com exemplos práticos
Validação de dados em Java: visão geral de ferramentas e bibliotecas
Métricas Prometheus em Swift: monitoramento de aplicativos iOS/macOS