Laravel: Executer une tache chaque heure à une minute précise

Petit quick tip aujourd'hui sur le scheduler (cron) de laravel.

Le scheduler de laravel permet une approche programmatique a la planification de taches récurentes. Comme le crontab du systeme, on peut définir des taches qui se lanceront automatiquement a une date et une heure précise. L'avantage indéniable de cette approche est de placer cette planification dans le code source de l'application, et non plus dans un fichier systeme tel que crontab. Cette configuration sera donc dépendante et inclue dans votre projet, et sera aussi intégrée au control de version tel que GIT.

Il est courant de vouloir planifier une tache pour qu'elle se lance chaque heure. Laravel propose donc le helper ->hourly() qui lancera la tache en question à chaque début d'une nouvelle heure.

$schedule->command('inspire')->hourly()->timezone('Europe/Paris');

Il existe une variante qui permet non seulement de lancer chaque heure une tache, mais aussi a une minute précise: le helper hourlyAt.

C'est trés utile pour éviter que toutes les taches planifiées de votre projet laravel ne se lancent en même temps à la premiere minute de chaque heure.

$schedule->command('inspire')->hourlyAt(45)->timezone('Europe/Paris');

Il existe une variante pour chaque méthode de planification (hourlyAt, dailyAt, weeklyOn, monthlyOn). Notez que tout comme cron, le scheduler de laravel n'a pas de résolution inférieure à la minute. On ne pourra donc pas scheduler une tache pour se lancer toutes les minutes avec 30 secondes de décallage.

Qu'avez vous pensé de cet article?