Définir des tâches cron avec Laravel
Une commande Cron est une commande Unix pour la planification des tâches à exécuter dans un délai spécifique et/ou un intervalle spécifique. Par exemple, nous pouvons planifier des tâches cron dans le serveur qui exécute des scripts qui envoient des rapports quotidiens / hebdomadaires à partir de notre site Web. Principalement, nous utilisons les tâches cron pour nettoyer les bases de données, envoyer les emails, exécuter des tâches consommant beaucoup de temps … .etc. Si je veux supprimer certains fichiers de ma base de données vieux d’un mois, je peux simplement le faire en utilisant une tâche cron. Le travail de Cron ne fonctionnera pas avec les machines ou les serveurs basés sur Windows, il ne fonctionne que sur des machines basées sur unix.
Cron a un fichier de configuration appelé Crontab qui est utilisé pour gérer l’ordonnancement. Ce crontab se compose de tâches cron différents et chaque tâche cron est associée à une tâche spécifique. Cron Job se compose principalement de deux parties, d’une expression Cron et d’une commande shell à exécuter.
Le format d’une tâche cron et la suivante : * * * * * /commande_a_executer
Chacune des étoiles a bien un sens : (De la gauche vers la droite bien sûr)
- Première étoile : Minutes (0-59)
- Deuxième étoile : Heures (0-23)
- Troisième étoile : Jour du mois (1-31)
- Quatrième étoile : Mois (1-12)
- Cinquième étoile : Jour de la semaine (0-6, le 0 correspondant au Dimanche)
Pour ouvrir le fichier crontab :
crontab -e
Exemples de tâches cron
- Exécuter la commande toutes les premières 5 minutes de chaque heure, 08h05, 10h05, etc…
5 * * * * command-to – run
- Exécuter la commande toutes les premières 5 minutes de chaque heure, 08h05, 10h05, etc… seulement les lundis
5 * * * 1 command-to- run
- Exécuter la commande toutes les 10 minutes (format avec un slash)
*/10 * * * * command- to – run
En ce qui concerne Laravel
Normalement pour la planification des tâches, vous devez êtes connecté (SSH par exemple) sur votre serveur pour ajouter les entrées Cron. La fonction de planificateur de commandes de Laravel vous permet de définir facilement et expressément votre programme de commandes dans Laravel lui-même, et seule une seule entrée Cron est nécessaire sur votre serveur pour exécuter le planificateur de tâches laravel à chaque minute.
Le programme de tâches de Laravel est défini dans la méthode de l’horaire à l’intérieur du fichier app/Console /Kernel.php . Nous pouvons définir autant de tâches dans cette méthode. Voici la seule entrée de Cron que vous devez ajouter à votre serveur, ce qui appellera chaque fois le planificateur de commandes Laravel.
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
Cette tâche cron va initier le Scheduler de Laravel pour l’exécution des tâches à l’intérieur de la méthode de planification.
protected function schedule(Schedule $schedule){}
Planification des tâches cron dans Laravel
Pour planifier les commandes, nous utilisons le planificateur de tâches de Laravel. Les tâches ont été définies dans la méthode de planification de la classe app/Console/Kernel.php . En utilisant la méthode schedule , nous pouvons ajouter autant de commandes que nous voulons. Il existe différentes fréquences de programmation que nous pouvons appliquer sur les commandes en fonction des besoins. Quelques exemples sont listés ci-dessous.
- Si une tâche est censée s’exécuter une fois par jour, nous pouvons utiliser la méthode daily() .
protected function schedule(Schedule $schedule) { $schedule->command('sms:gudmorning')->daily(); }
- Si nous voulons exécuter la tâche tous les jours à 10h30.
$schedule->command('Task')->dailyAt('10.30');
Listes des méthodes
Les différents types d’horaires que nous pouvons assigner à nos tâches sont,
- ->cron (‘* * * * * *’); Exécutez la tâche sur un planning personnalisé de Cron
- ->everyMinute (); Exécuter la tâche chaque minute
- ->everyFiveMinutes (); Exécuter la tâche toutes les cinq minutes
- ->everyTenMinutes (); Exécuter la tâche toutes les dix minutes
- ->everyThirtyMinutes (); Exécuter la tâche toutes les trente minutes
- ->everyHour(); Exécuter la tâche chaque heure
- ->daily (); – Exécuter la tâche tous les jours à minuit
- ->dailyAt (’13:00′); Exécutez la tâche tous les jours à 13h00
- ->twiceDaily(1, 13); Exécutez quotidiennement la tâche à 13h00 et 13h00
- ->weekly (); Exécutez la tâche chaque semaine
- ->monthly (); – Exécutez la tâche tous les mois
- ->monthlyOn (4, ’15: 00 ‘); Exécutez la tâche tous les 04 du mois à 15h00
- ->quarterly(); Exécuter la tâche chaque trimestre
- ->yearly (); Exécutez la tâche chaque année
- ->timezone(‘Amérique /New_York’); Définir le fuseau horaire
- ->weekdays(); – Limiter la tâche aux jours de la semaine
- -> sundays(); – Limiter la tâche au dimanche
- ->mondays(); – Limiter la tâche au lundi
- ->tuesdays(); – Limiter la tâche mardi
- ->wednesdays; – Limiter la tâche à mercredi
- ->thursdays(); – Limiter la tâche à jeudi
- ->fridays(); – Limiter la tâche à vendredi
- ->saturdays(); – Limiter la tâche au samedi
- ->when(Closure); – Limiter la tâche en fonction d’un test de vérité
Le planificateur de commandes Laravel nous aide à définir de façon expressive le programme de commandes dans Laravel avec une seule entrée Cron sur votre serveur.
Sources :
- http://cubettech.com/blog/how-to-use-cronjobs-with-laravel/
- https://laravel.com/docs/5.4/scheduling