Expressions Cron : Planifier n'importe quoi sans deviner
Ces chaînes de planification cryptiques enfin expliquées. Écris des expressions cron qui fonctionnent du premier coup.
0 0 * * * — qu'est-ce que ça signifie ?
Si tu as utilisé AWS Lambda, GitHub Actions ou n'importe quel planificateur de tâches, tu as vu des expressions cron. Cinq ou six champs cryptiques qui planifient des tâches d'une manière ou d'une autre.
Ce n'est pas aussi compliqué que ça en a l'air.
Les cinq champs
┌───────────── minute (0 - 59)
│ ┌───────────── heure (0 - 23)
│ │ ┌───────────── jour du mois (1 - 31)
│ │ │ ┌───────────── mois (1 - 12)
│ │ │ │ ┌───────────── jour de la semaine (0 - 6, dimanche = 0)
│ │ │ │ │
* * * * *
Chaque champ limite quand la tâche s'exécute. Un * signifie "chaque." Un nombre signifie "seulement cette valeur."
Exemples de lecture
0 0 * * * — Minute 0, heure 0, n'importe quel jour, n'importe quel mois, n'importe quel jour de semaine = Minuit chaque jour
30 8 * * 1-5 — 8h30, lundi au vendredi = Matins de semaine
0 */2 * * * — Toutes les 2 heures = 2h, 4h, 6h...
0 9 1 * * — 9h le 1er de chaque mois = Heure du rapport mensuel
Caractères spéciaux
* — Chaque valeur (chaque minute, chaque heure, etc.)
, — Valeurs multiples. 1,15 signifie le 1er et le 15.
- — Plage. 1-5 signifie de 1 à 5.
/ — Pas. */15 signifie tous les 15. */15 dans le champ minute = toutes les 15 minutes.
Motifs courants
Toutes les 5 minutes : */5 * * * *
Chaque heure à :30 : 30 * * * *
Quotidien à 3h : 0 3 * * *
Hebdomadaire le dimanche à minuit : 0 0 * * 0
Premier jour du mois à 9h : 0 9 1 * *
Jours de semaine à 18h : 0 18 * * 1-5
Les pièges
Jour de la semaine vs jour du mois. Si tu définis les deux, la plupart des systèmes les combinent avec OR. 0 0 1 * 1 s'exécute le 1er ET chaque lundi, pas seulement les lundis qui tombent le 1er.
Le fuseau horaire compte. La plupart des systèmes cron utilisent l'heure du serveur ou UTC. Sache avec lequel tu travailles.
6 champs vs 5 champs. Certains systèmes ajoutent un champ secondes au début. 0 0 0 * * * serait minuit avec un champ secondes.
Dimanche = 0 ou 7. Dépend du système. Les deux fonctionnent généralement pour dimanche.
Tester avant de déployer
Ne devine pas si 0 0 */2 * * s'exécute tous les 2 jours ou toutes les 2 heures. Utilise un analyseur cron.
Parcours quelques horaires de déclenchement attendus. Assure-toi qu'ils correspondent à ton intention.
Pour les tâches critiques, configure de la surveillance. Une expression cron décalée d'un champ peut exécuter ta tâche quotidienne toutes les heures—ou ta tâche horaire annuellement.
Alternatives au Cron
Syntaxe en anglais. Certains planificateurs acceptent "every day at 3pm" au lieu de 0 15 * * *. Plus clair mais moins portable.
Expressions de taux. AWS utilise rate(5 minutes) en plus des expressions cron. Plus facile pour les intervalles simples.
Timers systemd. Alternative Linux au cron avec meilleure journalisation et gestion des dépendances.
Les expressions cron sont denses mais apprenables. Cinq champs, chacun limitant quand les tâches s'exécutent. Teste tes expressions, surveille tes fuseaux horaires, et tu planifieras n'importe quoi de manière fiable.