Décodeur Cron : traduire une expression Cron en ligne

Collez n’importe quelle expression cron pour obtenir un texte lisible et voir les prochaines exécutions.

Décoder une expression Cron

Cron & Cron Expressions : Guide utilisateur et contenu d’assistance

TL;DR (Réponses cron rapides)

  • Cron expression (Unix) : minute hour day-of-month month day-of-week5 champs.
  • Variantes Quartz/Spring : souvent 6 ou 7 champs (ajout des seconds, parfois year) et le wildcard spécial **? ** pour no specific value dans DOM/DOW.
  • Kubernetes CronJob : spec.schedule utilise le format cron standard ; les clusters modernes supportent spec.timeZone pour des plannings à l’heure locale.
  • Bonne pratique : Toujours tester & monitorer tes cron jobs ; journalise les sorties et configure des alertes en cas d’échec.

C’est quoi Cron ?

Cron est un planificateur de tâches basé sur le temps dans les systèmes de type Unix. Il exécute des commandes à des intervalles définis via des cron expressions. Chaque ligne dans ton crontab déclare quand et quoi exécuter.

Où tourne cron :

  • System crontab : /etc/crontab (contient un champ utilisateur)
  • User crontab : crontab -e par utilisateur

Des chaînes prédéfinies comme @hourly, @daily, @weekly, @monthly, @reboot sont des raccourcis que tu peux utiliser à la place d’expressions complètes.


Syntaxe des cron expressions (Unix / style POSIX)

Format (5 champs) :

┌───────────── minute (0–59)
│ ┌─────────── hour (0–23)
│ │ ┌───────── day of month (1–31)
│ │ │ ┌─────── month (1–12 or JAN–DEC)
│ │ │ │ ┌───── day of week (0–6 or SUN–SAT; 0 or 7 = Sunday on many systems)
│ │ │ │ │
│ │ │ │ │
* * * * *

Wildcards & opérateurs

  • * any value
  • , list → 1,2,5
  • - range → 1-5
  • / step → */10
  • L, W, # sont des extensions non standard (souvent supportées par Quartz, pas par le cron Unix classique).

Exemples

  • Toutes les 15 minutes : */15 * * * *
  • Tous les jours à 02:00 : 0 2 * * *
  • En semaine à 18:30 : 30 18 * * 1-5
  • Premier jour du mois à 07:00 : 0 7 1 * *

Astuce portabilité : Évite de dépendre de modificateurs non standard sauf si ton scheduler les documente. Le cron Unix classique n’accepte pas ?, L, W ou #.


Quartz Cron / Spring Cron vs Unix Cron (les différences à connaître)

De nombreux planificateurs applicatifs (p. ex. Quartz, Spring) adoptent une syntaxe étendue :

  • Champs : seconds minutes hours day-of-month month day-of-week [year]6 ou 7 champs
  • Spécial ? : utilisé dans day-of-month ou day-of-week pour signifier no specific value
  • Des modificateurs étendus comme L (last), W (weekday), # (nth weekday) sont souvent supportés.

Mapping rapide

  • Unix : 0 2 * * * → tous les jours à 02:00
  • Quartz/Spring (avec seconds) : 0 0 2 * * ? → tous les jours à 02:00 (aucun DOW spécifique)

Pièges fréquents

  • Coller une expression à 5 champs d’Unix dans Spring/Quartz ne marchera pas. Ajoute seconds (et parfois year) ou utilise un helper pour convertir.
  • ? est invalide en Unix cron mais requis dans certains scénarios Quartz.

Kubernetes CronJobs (k8s)

  • Définis les plannings via spec.schedule (format cron standard).
  • Les versions récentes de Kubernetes supportent spec.timeZone, ce qui permet d’épingler un fuseau horaire IANA (par ex. "Europe/Zurich"). Sans cela, les plannings sont évalués selon l’heure locale du controller (souvent UTC).

Exemple

apiVersion: batch/v1
kind: CronJob
metadata:
  name: db-backup
spec:
  schedule: '0 2 * * *' # 02:00 tous les jours
  timeZone: 'Europe/Zurich' # garantit un planning à l’heure locale (supporté sur les clusters modernes)
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: backup
              image: alpine:3.20
              command: [ 'sh', '-lc', 'pg_dump $DB_URL > /backups/$(date +%F).sql' ]

Générateur / Décodeur de cron expressions (inline)

Utilise le générateur d’expressions Cron pour créer un planning, ou colle un planning existant dans le décodeur Cron afin d’obtenir une explication claire et les prochaines exécutions.

Modèles rapides

Langage naturelUnix cronQuartz/Spring
Chaque minute* * * * *0 * * * * ?
Toutes les 5 minutes*/5 * * * *0 */5 * * * ?
Toutes les heures à :3030 * * * *0 30 * * * ?
Tous les jours 02:000 2 * * *0 0 2 * * ?
Semaine (lun–ven) 18:3030 18 * * 1-50 30 18 ? * MON-FRI
1er du mois 07:000 7 1 * *0 0 7 1 * ?
Dimanches 00:000 0 * * 00 0 0 ? * SUN
Dernier jour du mois 23:00(non standard en Unix)0 0 23 L * ?

Aide au décodage

  • Tout */N → exécute toutes les N unités de ce champ.
  • DOM et DOW tous deux définis → le comportement varie selon l’implémentation ; reste sur un seul (ou utilise ? avec Quartz).

Bases de crontab

  • Éditer : crontab -e
  • Lister : crontab -l
  • Environnement : définis PATH, SHELL, MAILTO et tes variables explicitement - cron tourne avec un environnement minimal.
  • Sortie : capture avec >> /var/log/myjob.log 2>&1 ou compte sur le mail système.

Checklist de debug cron

  1. La commande est-elle exécutable en tant que même utilisateur ?
  2. Les chemins absolus sont-ils utilisés pour les binaires et les fichiers ?
  3. L’environnement (PATH, LANG, TZ) est-il défini ?
  4. L’expression est-elle valide pour la saveur de ton scheduler ?
  5. Les échecs sont-ils monitorés/alertés ?

Monitoring & fiabilité

  • Redirige les sorties vers des logs et alerte si les codes de retour ≠ 0.
  • Pense à des moniteurs dédiés (health pings, heartbeats) qui alertent quand des exécutions manquent.
  • Dans Kubernetes, surveille les statuts des Job, règle backoffLimit et conserve un peu d’historique.

Cron FAQs


Cron Checklist

  1. Identifie la saveur de scheduler (Unix, systemd timer, Quartz/Spring, k8s).
  2. Normalise les expressions à cette saveur (5 vs 6/7 champs, symboles spéciaux).
  3. Épingle le fuseau horaire et clarifie le comportement DST.
  4. Ajoute du monitoring (heartbeat + alertes d’échec).
  5. Documente la responsabilité, les runbooks et les chemins d’escalade.