Agendador de Tarefas PHP: guia completo sobre tarefas cron e Task Scheduler

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Agendador de Tarefas PHP: guia completo



O Agendador de Tarefas (Task Scheduler) é uma ferramenta criticamente importante para qualquer aplicação web que funcione em PHP. Ele permite automatizar a execução de operações rotineiras: envio de newsletters por e-mail, limpeza de cache, geração de relatórios, sincronização de dados com APIs externas e muito mais. Diferentemente da execução manual de scripts, o agendador garante a execução pontual e confiável das tarefas sem a intervenção do administrador.



Abordagens básicas para implementar um agendador em PHP



Existem duas formas principais de implementar um agendador de tarefas em projetos PHP:



  • Cron do sistema (Linux/Unix) — uso do daemon cron integrado para chamar scripts PHP em horários agendados.
  • Agendador personalizado (Task Scheduler) — implementação da lógica de agendamento diretamente no código PHP usando loops e verificações de tempo.


1. Cron do sistema com PHP



A abordagem mais comum e eficiente. Você cria um script PHP que executa as ações necessárias e, em seguida, adiciona uma entrada no crontab do servidor.



Exemplo de script PHP para cron (cron_job.php):



<?php// cron_job.php - executa a limpeza de sessões antigasrequire_once 'config.php';require_once 'db.php';

$stmt = $pdo->prepare("DELETE FROM sessions WHERE last_activity < NOW() - INTERVAL 1 DAY");$stmt->execute();

// Registro de execuçãofile_put_contents('logs/cron.log', date('Y-m-d H:i:s') . " - Sessões limpas", FILE_APPEND);?>


Entrada no crontab (executar a cada hora):



0 * * * * /usr/bin/php /var/www/html/cron_job.php


2. Task Scheduler personalizado em PHP



Se você não tem acesso ao cron do sistema (por exemplo, em hospedagem compartilhada), é possível implementar um agendador diretamente em PHP. Para isso, utiliza-se um script especial que é executado a cada visita ao site ou por requisição HTTP.



Exemplo de um agendador simples (task_scheduler.php):



<?phpclass TaskScheduler {    private $tasks = [];    private $lastRunFile = 'last_run.json';

public function addTask($name, callable $callback, $interval) { $this->tasks[] = [ 'name' => $name, 'callback' => $callback, 'interval' => $interval // em segundos ]; }

public function run() { $lastRun = $this->getLastRunTimes();

foreach ($this->tasks as $task) { $lastTime = $lastRun[$task['name']] ?? 0; if (time() - $lastTime >= $task['interval']) { echo "Executando tarefa: {$task['name']}"; call_user_func($task['callback']); $lastRun[$task['name']] = time(); } }

file_put_contents($this->lastRunFile, json_encode($lastRun)); }

private function getLastRunTimes() { if (file_exists($this->lastRunFile)) { return json_decode(file_get_contents($this->lastRunFile), true); } return []; }}

// Uso$scheduler = new TaskScheduler();

$scheduler->addTask('send_newsletter', function() { // Lógica de envio de newsletter echo "Newsletter enviada";}, 3600); // A cada hora

$scheduler->addTask('clean_cache', function() { // Limpeza de cache array_map('unlink', glob('cache/*.cache')); echo "Cache limpo";}, 86400); // Uma vez por dia

$scheduler->run();?>


3. Agendador avançado com suporte a expressões CRON



Para um gerenciamento mais flexível do agendamento, é possível implementar suporte a expressões cron clássicas (minuto, hora, dia, mês, dia da semana).



Exemplo de parser de expressões cron:



<?phpclass CronPar                    

Recommendations