Planificateur de tâches PHP : gestion des tâches périodiques dans le code
Dans le développement web moderne, il est souvent nécessaire d'effectuer des actions répétitives : envoi de newsletters par email, vidage du cache, génération de rapports, synchronisation de données avec des API externes. Traditionnellement, on utilise le cron système (crontab), mais cela nécessite un accès au shell et une configuration sur le serveur. La bibliothèque Planificateur de tâches PHP (Task Scheduler) permet d'implémenter un comportement de type cron directement dans une application PHP, sans avoir à modifier le crontab. C'est une solution idéale pour l'hébergement mutualisé, les environnements conteneurisés (Docker) ou les projets nécessitant une logique de planification flexible depuis le code.
Fonctionnalités principales
La bibliothèque fournit une interface fluide pour définir des tâches et leur planification. Fonctionnalités clés :
- Définition flexible de la planification – prise en charge des expressions cron, des intervalles (toutes les N minutes, heures, jours), d'une heure spécifique (tous les jours à 03:00).
- Exécution de commandes et de fonctions de rappel – possibilité d'exécuter des commandes shell, des méthodes de classes ou des fonctions anonymes.
- Gestion des files d'attente – intégration avec des files d'attente (par exemple, RabbitMQ, Redis) pour une exécution différée.
- Journalisation et notifications – prise en charge intégrée des journaux d'exécution, envoi d'erreurs par email ou vers Sentry.
- Sécurité – prévention de l'exécution parallèle d'une même tâche (mutex).
Installation et configuration
L'installation se fait via Composer :
composer require vendor/task-schedulerAprès l'installation, il faut créer un fichier scheduler.php, qui sera exécuté par le cron système (une fois par minute). À l'intérieur du fichier, toutes les tâches sont configurées :
<?phprequire_once __DIR__ . '/vendor/autoload.php';
use Scheduler\\Scheduler;use Scheduler\\Task;
$scheduler = new Scheduler();
// Tâche 1 : vidage du cache toutes les 30 minutes$scheduler->add(new Task('cache:clear', function() { // Logique de vidage du cache echo "Cache vidé à " . date('Y-m-d H:i:s') . PHP_EOL;}), '*/30 * * * *');
// Tâche 2 : envoi de la newsletter chaque jour à 9:00$scheduler->add(new Task('send:newsletter', 'php artisan newsletter:send'), '0 9 * * *');
// Tâche 3 : mise à jour des statistiques toutes les 5 minutes, mais pas plus d'une fois toutes les 10 minutes$scheduler->add(new Task('update:stats', function() { // Opération longue sleep(5);}), '*/5 * * * *', [ 'mutex' => true, // protection contre l'exécution parallèle 'timeout' => 300 // temps d'exécution maximum (5 minutes)]);
$scheduler->run();?>Dans le crontab système, on ajoute la ligne :
* * * * * php /path/to/scheduler.php >> /dev/null 2>&1Désormais, le script PHP sera exécuté chaque minute et vérifiera quelles tâches doivent être effectuées.
Exemples d'utilisation
1. Planificateur simple avec rappel
<?php$scheduler->add(new Task('greet', function() { echo "Bonjour, le monde !";}), '*/1 * * * *'); // Chaque minute2. Exécution d'une commande Artisan Laravel
<?php$scheduler->add(new Task('reports:generate', 'php artisan reports:generate --force'), '0 2 * * 1'); // Chaque lundi à 2:003. Utilisation d'intervalles au lieu 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. Exécution différée via une file d'attente
<?php$scheduler->add(new Task('process:payments', function() use ($queue) { $queue->push(new Aussi dans la bibliothèque
Typegoose pour TypeScript : guide complet avec exemples
Configuration des applications Kotlin : bibliothèques et outils pour la gestion des paramètres
AngleSharp C# (.NET) : guide complet avec exemples