Accueil
  • #développement
  • #cron
  • #outils

Lire une expression cron : champs, symboles et pièges

Par · · 4 min de lecture

*/15 9-17 * * 1-5 : cinq groupes de caractères, aucun mot, et pourtant c’est un planning complet. Les expressions cron pilotent les sauvegardes, les envois de rapports et les tâches de maintenance, et une erreur d’un champ suffit à lancer un traitement à la mauvaise heure. Voici comment lire une expression cron sans hésiter, les exemples que l’on rencontre le plus souvent et les pièges qui surprennent même les habitués.

Les cinq champs, dans l’ordre#

Une expression cron standard compte cinq champs séparés par des espaces :

  • la minute, de 0 à 59 ;
  • l’heure, de 0 à 23 ;
  • le jour du mois, de 1 à 31 ;
  • le mois, de 1 à 12 (ou JAN à DEC) ;
  • le jour de la semaine, de 0 à 7 (ou SUN à SAT), où 0 et 7 désignent tous deux le dimanche.

Il n’y a pas de champ pour les secondes : la plus petite unité de planification est la minute. Un champ « secondes » ou le caractère ? appartient à Quartz et à Spring, pas au cron standard.

Les caractères spéciaux : *, ,, - et /#

  • * signifie « toutes les valeurs » : * * * * * s’exécute chaque minute.
  • , énumère des valeurs : 0 8,12,18 * * * se déclenche à 08:00, 12:00 et 18:00.
  • - définit une plage : 0 9 * * MON-FRI correspond aux jours ouvrés, à 09:00.
  • / définit un pas : */15 dans le champ des minutes donne 0, 15, 30 et 45. On peut aussi l’appliquer à une plage : 10-30/5 donne 10, 15, 20, 25 et 30.

Le pas repart toujours du début du champ. */7 dans les minutes donne 0, 7, 14… 56, puis revient à 0 à l’heure suivante, soit seulement 4 minutes après. Un intervalle qui ne divise pas 60 n’est donc pas régulier.

Des exemples à connaître#

*/15 * * * *    toutes les 15 minutes
30 8 * * *      tous les jours à 08:30
0 9 * * 1-5     du lundi au vendredi à 09:00
0 */2 * * *     toutes les 2 heures, à la minute 0
0 0 1 * *       le 1er de chaque mois, à minuit
0 0 29 2 *      le 29 février, les années bissextiles seulement

Beaucoup d’implémentations acceptent aussi des alias : @hourly, @daily, @weekly, @monthly et @yearly. Par exemple @daily équivaut à 0 0 * * *. Vérifiez que votre système les prend en charge, ils ne sont pas universels.

Autre subtilité : */15 9-17 * * 1-5 s’arrête à 17:45, pas à 17:00. Le champ des heures contient 17 : les exécutions de 17:00, 17:15, 17:30 et 17:45 ont donc bien lieu.

Les pièges à éviter#

Jour du mois et jour de la semaine ensemble. Quand ces deux champs sont renseignés, le cron standard exécute la tâche si l’un OU l’autre correspond. 0 0 13 * 5 se lance tous les 13 du mois et tous les vendredis, pas seulement les vendredis 13. Si l’un des deux champs commence par une étoile, les deux conditions doivent au contraire être vraies. Pour obtenir « vendredi 13 », il faut vérifier la condition dans le script lui-même.

Le fuseau du serveur. Cron lit l’horaire dans le fuseau de la machine, souvent UTC sur un serveur ou un service cloud. GitHub Actions, par exemple, planifie ses tâches en UTC. Un 0 9 * * * censé être « 9 h à Paris » tombera donc à 10 h ou 11 h selon la saison. Pour comparer des heures entre villes, utilisez un convertisseur de fuseaux horaires.

Les changements d’heure. Une tâche à 02:30 peut être sautée le jour du passage à l’heure d’été ou lancée deux fois au retour à l’heure d’hiver, selon l’implémentation. En Europe comme en Amérique du Nord, éviter la plage 02:00-03:00 règle le problème.

Les jours qui n’existent pas. 0 0 31 * * ne se déclenche pas en février, en avril, en juin, en septembre ni en novembre.

Vérifier une expression avant de la déployer#

L’explicateur d’expressions cron évite de deviner :

  1. Saisissez ou collez l’expression dans « Expression cron », ou partez d’un des exemples proposés.
  2. Lisez la phrase en français sous « Signification », par exemple « À 09:00 du lundi au vendredi ».
  3. Contrôlez « Détail par champ » : chaque champ est expliqué, et une erreur est signalée sur le champ concerné.
  4. Choisissez un « Fuseau horaire » (celui du navigateur, UTC ou Paris) pour voir les 10 « Prochaines exécutions » avec la date complète.

L’outil prévient quand le jour du mois et le jour de la semaine fonctionnent en « OU », et quand un jour n’existe pas dans certains mois. Si un log affiche une date sous forme de nombre, le convertisseur de timestamp vous aide à vérifier que la tâche s’est bien exécutée à l’heure prévue. Le calcul se fait dans votre navigateur, sans envoi de l’expression.

Outils utilisés dans cet article

À lire aussi