Dans le passé, chaque tâche automatisée sous Linux nécessitait d'ajouter manuellement une ligne obscure dans crontab. Grâce au Task Scheduling de Laravel, un seul Cron suffit sur le serveur : toute votre planification s'écrit en PHP fluide dans routes/console.php.
Une seule entrée * * * * * php artisan schedule:run déclenche toutes vos tâches à la seconde près.
Nouveau standard Laravel 11 : définissez vos schedules avec la façade Schedule sans aucun fichier Kernel.
Empêche une tâche longue de s'exécuter en doublon si la précédente n'a pas encore fini son travail.
Testez vos planifications en local sur Windows ou Mac sans Cron Linux grâce au worker d'émulation intégré.
// 1. routes/console.php (Planification centralisée en Laravel 11)
use IlluminateSupportFacadesSchedule;
use AppJobsGenerateMonthlyReport;
// A. Commande exécutée tous les jours à 02h00 du matin
Schedule::command('backup:clean')->dailyAt('02:00');
// B. Sauvegarde complète chaque nuit avec protection contre le chevauchement
Schedule::command('backup:run')
->dailyAt('02:30')
->withoutOverlapping()
->emailOutputOnFailure('admin@learnweb.test');
// C. Nettoyage des modèles supprimés (SoftDeletes expirés) chaque semaine
Schedule::command('model:prune')->weekly();
// D. Dispatch d'un Job lourd le 1er du mois
Schedule::job(new GenerateMonthlyReport)->monthlyOn(1, '06:00');
// 2. Commandes Artisan d'inspection :
// Lister toutes les tâches et leurs prochaines exécutions :
// php artisan schedule:list
// Tester en local (exécute un scheduler toutes les minutes en boucle) :
// php artisan schedule:workChoisissez une heure de la journée ou simulez le déclenchement de la minute courante pour voir quelles commandes de l'ordonnanceur sont sélectionnées et exécutées.
| Commande | Fréquence | Heure Programmée | Statut à 02:00 |
|---|---|---|---|
| backup:clean | dailyAt(02:00) | 02:00 | ▶ À EXÉCUTER MAINTENANT |
| backup:run | dailyAt(02:00) | 02:00 | ▶ À EXÉCUTER MAINTENANT |
| emails:send-morning-digest | dailyAt(08:00) | 08:00 | En attente |
| metrics:refresh | hourly() | Toutes les heures | ▶ À EXÉCUTER MAINTENANT |
| reports:send-daily | dailyAt(18:30) | 18:30 | En attente |
| Méthode Schedule | Périodicité | Exemple Pratique |
|---|---|---|
->everyMinute() | Toutes les minutes | Schedule::command('ping:services')->everyMinute(); |
->hourly() | Toutes les heures (à la minute 0) | Schedule::command('cache:prune')->hourly(); |
->dailyAt('03:00') | Chaque jour à une heure précise | Schedule::command('backup:run')->dailyAt('03:00'); |
->weekdays() | Du lundi au vendredi uniquement | Schedule::command('reports:send')->weekdays(); |
->monthlyOn(1, '00:00') | Le premier jour du mois à minuit | Schedule::command('invoices:generate')->monthly(); |