Cron Expression Validator
Cron-Ausdrücke validieren und eine detaillierte feldweise Aufschlüsselung erhalten
Cron-Ausdruck
minute hour day(month) month day(week)
Feldaufschlüsselung
*/15(0–59)Erweitert zu: 0, 15, 30, 45
0-6(0–23)Erweitert zu: 0, 1, 2, 3, 4, 5, 6
1,15(1–31)Erweitert zu: 1, 15
*(1–12)Erweitert zu: all (1–12)
1-5(0–6)Erweitert zu: 1, 2, 3, 4, 5
Was ist Cron-Ausdrucks-Validierung?
Die Validierung eines Cron-Ausdrucks ist der Prozess, mit dem geprüft wird, ob ein Cron-String die korrekten Syntaxregeln einhält, bevor er einen Scheduler erreicht. Ein Cron-Ausdruck verwendet fünf durch Leerzeichen getrennte Felder (Minute, Stunde, Monatstag, Monat, Wochentag), um einen wiederkehrenden Zeitplan zu definieren. Enthält ein Feld einen Wert außerhalb des gültigen Bereichs, einen ungültigen Operator oder einen Strukturfehler wie eine falsche Feldanzahl, wird der Ausdruck vom Scheduler entweder zur Deployment-Zeit abgelehnt oder er trifft lautlos keinen Auslösezeitpunkt.
Die Online-Validierung eines Cron-Ausdrucks deckt Fehler früher auf als das Deployment in die Produktion und das Warten auf einen ausgefallenen Job. Typische Fehler sind: 25 im Stundenfeld (gültiger Bereich: 0-23), ein Schrittwert von null (*/0, der undefiniert ist), umgekehrte Bereichsgrenzen (5-1 statt 1-5) oder zusätzliche Felder, die zu nicht-standardmäßigen Formaten wie Quartz gehören. Ein Syntax-Checker markiert diese Probleme sofort und zeigt an, welches Feld fehlerhaft ist.
Cron-Validierung unterscheidet sich vom Cron-Parsing. Ein Parser nimmt einen gültigen Ausdruck und übersetzt ihn in einen menschenlesbaren Zeitplan. Ein Validator beantwortet eine einfachere Frage: Ist dieser Ausdruck wohlgeformt? Validiere, bevor du parsest — es hat keinen Sinn, einen ungültigen Ausdruck an einen Scheduler zu übergeben. In CI/CD-Pipelines verhindert automatisierte Cron-Validierung, dass fehlerhafte Zeitpläne in Konfigurationsdateien eingebunden werden.
Warum diesen Cron-Validator verwenden?
Ein Cron-Ausdruck hat strenge Syntaxregeln, und Scheduler liefern bei Regelverstößen inkonsistente Fehlermeldungen. Manche Scheduler lehnen den Ausdruck mit einem kryptischen Fehler ab; andere akzeptieren ihn lautlos und lösen nie aus. Dieser Validator gibt dir eine klare, feldweise Diagnose, bevor du deployest.
Anwendungsfälle für den Cron-Validator
Häufige Cron-Syntaxfehler
Die folgende Tabelle listet die häufigsten Fehler bei Cron-Ausdrücken auf und deren Ursachen. Das sind die Fehler, die in Produktionskonfigurationen und CI/CD-Pipelines immer wieder auftauchen.
| Fehlertyp | Beispiel | Was schiefgelaufen ist |
|---|---|---|
| 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. |
Gültige vs. ungültige Cron-Ausdrücke
Eine schnelle Referenz mit wohlgeformten Ausdrücken neben häufigen Fehlern. Verwende dies zur Überprüfung deines Ausdrucks, bevor du ihn in eine Scheduler-Konfiguration einfügst.
Code-Beispiele
So validierst du Cron-Ausdrücke programmatisch in JavaScript, Python, Go und Bash. Jedes Beispiel zeigt, wie ungültige Syntax abgefangen und eine aussagekräftige Fehlermeldung extrahiert wird.
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"