ToolkitVault Logo

Décodeur d’expressions Cron

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

Décoder une expression Cron

[ Publicité • Nos Partenaires ]

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 la référence rapide ci-dessous pour composer ou décoder des plannings. Copie/colle dans ton crontab ou dans un CronJob k8s.

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.

[ Publicité • Nos Partenaires ]