Validateur d'expressions Cron
Validez des expressions cron et obtenez une analyse détaillée champ par champ
Expression cron
minute hour day(month) month day(week)
Analyse des champs
*/15(0–59)Se développe en: 0, 15, 30, 45
0-6(0–23)Se développe en: 0, 1, 2, 3, 4, 5, 6
1,15(1–31)Se développe en: 1, 15
*(1–12)Se développe en: all (1–12)
1-5(0–6)Se développe en: 1, 2, 3, 4, 5
Qu'est-ce que la validation d'expressions cron ?
La validation d'une expression cron consiste à vérifier qu'une chaîne cron respecte les règles de syntaxe correctes avant d'atteindre un planificateur. Une expression cron utilise cinq champs séparés par des espaces (minute, heure, jour-du-mois, mois, jour-de-la-semaine) pour définir une planification récurrente. Si un champ contient une valeur hors plage, un opérateur invalide ou une erreur de structure comme un nombre de champs incorrect, l'expression sera soit rejetée par le planificateur au déploiement, soit silencieusement ignorée sans jamais correspondre à une heure de déclenchement.
Valider une expression cron en ligne permet de détecter les erreurs bien avant de déployer en production et d'attendre qu'une tâche soit manquée. Les erreurs fréquentes : écrire 25 dans le champ heure (plage valide : 0-23), utiliser un pas de zéro (*/0, indéfini), inverser les bornes d'une plage (5-1 au lieu de 1-5), ou ajouter des champs supplémentaires propres à des formats non standard comme Quartz. Un vérificateur de syntaxe signale ces problèmes instantanément et indique précisément quel champ est incorrect.
La validation cron diffère de l'analyse cron. Un parseur prend une expression valide et la traduit en planification lisible. Un validateur répond à une question plus simple : cette expression est-elle bien formée ? Validez avant d'analyser — il est inutile d'alimenter un planificateur avec une expression invalide. Dans les pipelines CI/CD, la validation automatique des expressions cron empêche l'intégration de planifications incorrectes dans les fichiers de configuration.
Pourquoi utiliser ce validateur cron ?
Une expression cron obéit à des règles de syntaxe strictes, et les planificateurs fournissent des messages d'erreur peu clairs lorsque ces règles sont enfreintes. Certains rejettent l'expression avec une erreur cryptique ; d'autres l'acceptent silencieusement et ne se déclenchent jamais. Ce validateur vous donne un diagnostic clair, champ par champ, avant le déploiement.
Cas d'utilisation du validateur cron
Erreurs courantes de syntaxe cron
Le tableau ci-dessous liste les erreurs d'expression cron les plus fréquentes et leurs causes. Ce sont les fautes qui reviennent régulièrement dans les configurations de production et les pipelines CI/CD.
| Type d'erreur | Exemple | Ce qui ne va pas |
|---|---|---|
| Too few fields | 0 9 * * | Missing the day-of-week field. Standard cron requires exactly 5 fields. |
| Too many fields | 0 0 9 * * 1 2026 | Extra fields. Some tools add seconds or year, but standard cron uses 5. |
| Value out of range | 0 25 * * * | Hour field accepts 0-23. Value 25 exceeds the maximum. |
| Invalid step base | 0 0 32/2 * * | Day-of-month starts at 32, which exceeds the 1-31 range. |
| Step of zero | */0 * * * * | Step value must be 1 or greater. Zero creates an infinite loop. |
| Empty field | 0 9 * * 1 | Double space creates an empty field. Each field needs a value. |
| Invalid character | 0 9 * * Mon-Fry | Typo in day name. Use three-letter abbreviations: MON, TUE, WED, THU, FRI, SAT, SUN. |
| Reversed range | 0 9 * * 5-1 | Range end (1) is less than start (5). Write 1-5 or use a list: 5,6,0,1. |
Expressions cron valides et invalides
Un référentiel rapide des expressions bien formées accompagnées des erreurs courantes. Utilisez-le pour vérifier votre expression avant de la coller dans une configuration de planificateur.
Exemples de code
Comment valider des expressions cron par programmation en JavaScript, Python, Go et Bash. Chaque exemple montre comment détecter une syntaxe invalide et extraire un message d'erreur significatif.
import { parseExpression } from 'cron-parser';
// Validate a cron expression by attempting to parse it
function validateCron(expr) {
try {
parseExpression(expr);
return { valid: true, error: null };
} catch (err) {
return { valid: false, error: err.message };
}
}
console.log(validateCron('0 9 * * 1-5'));
// → { valid: true, error: null }
console.log(validateCron('0 25 * * *'));
// → { valid: false, error: "Constraint error, got value 25 expected range 0-23" }
// Validate with field-level detail using cron-validator
import { isValidCron } from 'cron-validator';
isValidCron('*/15 * * * *'); // → true
isValidCron('*/15 * * * *', { seconds: true }); // → false (expects 6 fields)
isValidCron('0 0 31 2 *'); // → true (syntactically valid, Feb 31 never fires)from croniter import croniter
# Validate by checking if croniter can parse the expression
def validate_cron(expr: str) -> dict:
if croniter.is_valid(expr):
return {"valid": True, "error": None}
# Get a more specific error message
try:
croniter(expr)
except (ValueError, KeyError) as e:
return {"valid": False, "error": str(e)}
return {"valid": False, "error": "Unknown error"}
print(validate_cron("0 9 * * 1-5"))
# → {'valid': True, 'error': None}
print(validate_cron("0 25 * * *"))
# → {'valid': False, 'error': '...out of range...'}
print(validate_cron("* * *"))
# → {'valid': False, 'error': 'Exactly 5 or 6 columns...'}
# Field-level validation
from crontab import CronTab
cron = CronTab(tab="")
job = cron.new(command="/bin/true")
try:
job.setall("0 9 * * 1-5")
print(job.is_valid()) # → True
except Exception as e:
print(f"Invalid: {e}")package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
// ValidateCron checks whether a 5-field cron expression is syntactically correct
func ValidateCron(expr string) (bool, error) {
parser := cron.NewParser(
cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow,
)
_, err := parser.Parse(expr)
if err != nil {
return false, err
}
return true, nil
}
func main() {
exprs := []string{
"0 9 * * 1-5", // valid
"0 25 * * *", // invalid: hour 25
"*/15 * * * *", // valid
"0 0 32 * *", // invalid: day 32
}
for _, e := range exprs {
ok, err := ValidateCron(e)
if ok {
fmt.Printf("%-20s VALID
", e)
} else {
fmt.Printf("%-20s INVALID: %v
", e, err)
}
}
}#!/bin/bash
# Validate cron syntax using Python one-liner
validate_cron() {
python3 -c "
from croniter import croniter
import sys
expr = sys.argv[1]
if croniter.is_valid(expr):
print(f'VALID: {expr}')
sys.exit(0)
else:
print(f'INVALID: {expr}')
sys.exit(1)
" "$1"
}
validate_cron "0 9 * * 1-5" # → VALID: 0 9 * * 1-5
validate_cron "0 25 * * *" # → INVALID: 0 25 * * *
# Quick regex pre-check (catches field count and obvious issues)
cron_regex='^([0-9*/,-]+\s+){4}[0-9*/,-]+$'
echo "*/5 * * * *" | grep -Eq "$cron_regex" && echo "passes basic check"
echo "* * *" | grep -Eq "$cron_regex" || echo "fails basic check"