Cron Expression Validator
Ověřujte cron výrazy a zobrazte podrobný rozpis pole po poli
Cron výraz
minute hour day(month) month day(week)
Rozpis polí
*/15(0–59)Rozšiřuje se na: 0, 15, 30, 45
0-6(0–23)Rozšiřuje se na: 0, 1, 2, 3, 4, 5, 6
1,15(1–31)Rozšiřuje se na: 1, 15
*(1–12)Rozšiřuje se na: all (1–12)
1-5(0–6)Rozšiřuje se na: 1, 2, 3, 4, 5
Co je ověřování cron výrazů?
Ověřování cron výrazů je proces kontroly, zda cron řetězec splňuje pravidla správné syntaxe předtím, než ho zpracuje plánovač. Cron výraz používá pět polí oddělených mezerami (minuta, hodina, den v měsíci, měsíc, den v týdnu) k definici opakujícího se plánování. Pokud jakékoli pole obsahuje hodnotu mimo povolený rozsah, neplatný operátor nebo strukturální chybu jako nesprávný počet polí, výraz bude plánovačem při nasazení odmítnut nebo se tiše nespustí v žádný čas.
Ověření cron výrazu online zachytí chyby dříve, než nasadíte aplikaci do produkce a čekáte na zmeškanou úlohu. Typické chyby zahrnují zápis hodnoty 25 v poli hodin (platný rozsah: 0–23), použití kroku nula (*/0, který je nedefinovaný), obrácení hranic rozsahu (5-1 místo 1-5) nebo přidání extra polí patřících nestandardním formátům jako Quartz. Kontrola syntaxe tyto problémy okamžitě označí a přesně řekne, které pole je chybné.
Ověřování cron výrazů se liší od parsování. Parser vezme platný výraz a přeloží ho do srozumitelného popisu plánování. Validátor odpovídá na jednodušší otázku: je výraz správně sestavený? Ověřte nejprve, pak teprve parsujte — nemá smysl předávat neplatný výraz plánovači. V CI/CD pipeline automatizované ověřování cron výrazů zabrání přenesení chybných plánování do konfiguračních souborů.
Proč použít tento validátor cron výrazů?
Cron výraz má přísná syntaktická pravidla a plánovače podávají nekonzistentní chybové zprávy, když jsou tato pravidla porušena. Některé plánovače výraz odmítnou s kryptickou chybou, jiné ho tiše přijmou a nikdy nespustí. Tento validátor vám poskytne jasnou diagnózu pole po poli ještě před nasazením.
Případy použití validátoru cron výrazů
Časté chyby cron syntaxe
Tabulka níže uvádí nejčastější chyby v cron výrazech a jejich příčiny. Jsou to chyby, které se opakovaně vyskytují v produkčních konfiguracích a CI/CD pipeline.
| Typ chyby | Příklad | Co se pokazilo |
|---|---|---|
| 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. |
Platné vs. neplatné cron výrazy
Stručný přehled správně sestavených výrazů vedle běžných chyb. Použijte ho k rychlé kontrole svého výrazu před vložením do konfigurace plánovače.
Příklady kódu
Jak ověřovat cron výrazy programově v JavaScriptu, Pythonu, Go a Bash. Každý příklad ukazuje, jak zachytit neplatnou syntaxi a extrahovat srozumitelnou chybovou zprávu.
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"