Cron Expression Validator
Validera cron-uttryck och visa detaljerad fältvis uppdelning
Cron-uttryck
minute hour day(month) month day(week)
Fältuppdelning
*/15(0–59)Utökas till: 0, 15, 30, 45
0-6(0–23)Utökas till: 0, 1, 2, 3, 4, 5, 6
1,15(1–31)Utökas till: 1, 15
*(1–12)Utökas till: all (1–12)
1-5(0–6)Utökas till: 1, 2, 3, 4, 5
Vad är validering av cron-uttryck?
Validering av cron-uttryck är processen att kontrollera om en cron-sträng följer de korrekta syntaxreglerna innan den når en schemaläggare. Ett cron-uttryck använder fem blankstegsavgränsade fält (minut, timme, dag-i-månaden, månad, veckodag) för att definiera ett återkommande schema. Om ett fält innehåller ett värde utanför tillåtet intervall, en ogiltig operator eller ett strukturellt fel som fel antal fält, kommer uttrycket antingen att avvisas av schemaläggaren vid driftsättning eller tyst misslyckas med att matcha någon utlösningstid.
Att validera ett cron-uttryck online fångar fel tidigare än att driftsätta till produktion och vänta på ett missat jobb. Typiska misstag inkluderar att skriva 25 i timfältet (giltigt intervall: 0–23), använda ett steg på noll (*/0, vilket är odefinierat), vända på intervallgränserna (5-1 i stället för 1-5), eller lägga till extra fält som hör till icke-standardformat som Quartz. En syntaxkontroll flaggar dessa problem direkt och talar om exakt vilket fält som är fel.
Cron-validering skiljer sig från cron-tolkning. En tolk tar ett giltigt uttryck och omvandlar det till ett läsbart schema. En validerare svarar på en enklare fråga: är uttrycket välformat? Validera innan du tolkar — det finns ingen anledning att mata en schemaläggare med ett ogiltigt uttryck. I CI/CD-pipelines förhindrar automatiserad cron-validering att felaktiga scheman slås samman i konfigurationsfiler.
Varför använda denna cron-validerare?
Ett cron-uttryck har strikta syntaxregler, och schemaläggare ger inkonsistenta felmeddelanden när dessa regler bryts. Vissa schemaläggare avvisar uttrycket med ett kryptiskt fel; andra accepterar det tyst och utlöser aldrig. Denna validerare ger dig en tydlig, fältvis diagnos innan du driftsätter.
Användningsfall för cron-valideraren
Vanliga cron-syntaxfel
Tabellen nedan listar de vanligaste felen i cron-uttryck och vad som orsakar dem. Det är misstag som dyker upp upprepade gånger i produktionskonfigurationer och CI/CD-pipelines.
| Feltyp | Exempel | Vad gick fel |
|---|---|---|
| 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. |
Giltiga och ogiltiga cron-uttryck
En snabbreferens med välformade uttryck bredvid vanliga misstag. Använd detta för att kontrollera ditt uttryck innan du klistrar in det i en schemaläggarkonfiguration.
Kodexempel
Hur man validerar cron-uttryck programmatiskt i JavaScript, Python, Go och Bash. Varje exempel visar hur man fångar ogiltig syntax och extraherar ett meningsfullt felmeddelande.
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"