Cron Expression Validator

Ověřujte cron výrazy a zobrazte podrobný rozpis pole po poli

Zkusit příklad

Cron výraz

minute hour day(month) month day(week)

Platný cron výraz

Rozpis polí

Minute*/15(0–59)

Rozšiřuje se na: 0, 15, 30, 45

Hour0-6(0–23)

Rozšiřuje se na: 0, 1, 2, 3, 4, 5, 6

Day of month1,15(1–31)

Rozšiřuje se na: 1, 15

Month*(1–12)

Rozšiřuje se na: all (1–12)

Day of week1-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.

Okamžitá kontrola syntaxe
Vložte nebo napište cron výraz a ihned uvidíte, zda prošel ověřením. Bez odeslání formuláře, bez prodlevy. Výsledek se aktualizuje při každém stisku klávesy.
🔒
Zpracování s důrazem na soukromí
Ověřování probíhá zcela ve vašem prohlížeči. Vaše cron výrazy a konfigurace plánování nejsou nikdy odesílány na server ani nikde ukládány.
🔍
Hlášení chyb pole po poli
Pokud je výraz neplatný, validátor identifikuje, které pole způsobilo chybu a proč. Žádné hádání, které z pěti polí má problém.
📋
Bez nutnosti účtu
Otevřete stránku a začněte kontrolovat. Bez přihlášení, API klíče nebo instalace. Funguje na jakémkoli zařízení s moderním prohlížečem, včetně mobilního.

Případy použití validátoru cron výrazů

Frontend vývojář
Ověřujte cron výrazy zadané uživateli v plánovacích rozhraních před jejich uložením do databáze. Zachyťte syntaktické chyby na straně klienta místo čekání na odmítnutí backendem.
Backend inženýr
Kontrolujte cron výrazy v konfiguracích front úloh (Celery beat, Hangfire, Quartz) při code review. Ověřte, zda refaktorovaný plánovací řetězec stále splňuje syntaktická pravidla.
DevOps / SRE
Ověřujte cron plánování v manifestech Kubernetes CronJob a konfiguracích CI/CD pipeline před jejich aplikováním. Zabraňte tomu, aby překlep v plánování záloh zůstal nepovšimnut až do chvíle, kdy záloha selže.
QA inženýr
Testujte, zda vaše aplikace správně odmítá neplatný cron vstup. Generujte záměrně chybné výrazy (hodnoty mimo rozsah, nesprávný počet polí) a ověřte, zda ošetření chyb funguje správně.
Datový inženýr
Ověřujte cron triggery pro Airflow DAG a plánované spuštění dbt. Potvrďte, že plánování pipeline načtená z YAML nebo JSON konfiguračních souborů jsou syntakticky správná před nasazením.
Student / Začátečník
Experimentujte s cron syntaxí a získejte okamžitou zpětnou vazbu o tom, co je platné a co způsobuje chybu. Naučte se rozsahy polí, operátory a okrajové případy testováním výrazů a čtením chybových zpráv.

Č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 chybyPříkladCo se pokazilo
Too few fields0 9 * *Missing the day-of-week field. Standard cron requires exactly 5 fields.
Too many fields0 0 9 * * 1 2026Extra fields. Some tools add seconds or year, but standard cron uses 5.
Value out of range0 25 * * *Hour field accepts 0-23. Value 25 exceeds the maximum.
Invalid step base0 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 field0 9 * * 1Double space creates an empty field. Each field needs a value.
Invalid character0 9 * * Mon-FryTypo in day name. Use three-letter abbreviations: MON, TUE, WED, THU, FRI, SAT, SUN.
Reversed range0 9 * * 5-1Range 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.

Platné výrazy
* * * * *
0 9 * * 1-5
*/15 * * * *
0 0 1,15 * *
30 2 * * 0
0 */6 * * *
Neplatné výrazy
0 9 * *4 pole, potřeba 5
0 25 * * *maximum hodin je 23
*/0 * * * *krok nemůže být 0
0 9 * * 8maximum dne v týdnu je 6
60 * * * *maximum minut je 59
0 0 0 * *minimum dne v měsíci je 1

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.

JavaScript (Node.js)
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)
Python
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}")
Go
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)
        }
    }
}
Bash
#!/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"

Nejčastější dotazy

Co způsobuje neplatnost cron výrazu?
Cron výraz je neplatný, pokud porušuje syntaktická pravidla pětipolicového formátu. Běžné příčiny: nesprávný počet polí (méně nebo více než 5 pro standardní cron), hodnota mimo povolený rozsah (např. hodina 25, minuta 60, den v měsíci 0), krok nula (*/0), obrácené hranice rozsahu (5-1) nebo nerozpoznané znaky. Výraz musí mít přesně pět polí oddělených mezerou s platnými hodnotami a operátory v každém poli.
Je cron výraz platný, pokud se nikdy nespustí?
Ano, syntakticky. Výraz jako 0 0 31 2 * (31. února) projde syntaktickým ověřením, protože každé pole obsahuje hodnoty v povolených rozsazích. Nikdy se však nespustí, protože únor nemá 31 dní. Většina validátorů kontroluje pouze syntaxi, nikoli sémantickou správnost. Pokud potřebujete odhalit nedosažitelná plánování, vypočítejte příštích N časů spuštění a zkontrolujte, zda je seznam prázdný.
Jak ověřím cron výraz se 6 nebo 7 poli?
Standardní POSIX cron používá 5 polí. Quartz Scheduler přidává pole sekund na začátek (6 polí) a volitelné pole roku na konec (7 polí). AWS EventBridge používá 6 polí. Tento validátor kontroluje standardní 5-polní formát. Pro ověření výrazů Quartz nebo EventBridge použijte knihovnu s podporou rozšířeného formátu, například cron-parser s volbou extended v Node.js nebo quartz-cron v Javě.
Lze v cron výrazech používat pojmenované dny a měsíce?
Většina implementací cron přijímá třípísmenné anglické zkratky pro měsíce (JAN–DEC) a dny v týdnu (SUN–SAT). V crontab se na velikosti písmen nezáleží, v jiných systémech může záležet. Pojmenované hodnoty nelze na všech platformách používat v rozsazích: MON-FRI funguje v crontab, ale ne v každé knihovně. Pokud záleží na přenositelnosti, používejte číselné hodnoty (1–5 pro pondělí až pátek).
Proč můj cron výraz funguje v crontab, ale selže v Kubernetes?
Kubernetes CronJobs používají stejný 5-polní formát jako crontab, ale jsou zpracovávány Go cron knihovnou, která má přísnější ověřování. Výrazy, které crontab toleruje (jako odřádkování na konci nebo nastavení dne v měsíci i dne v týdnu na jiné než zástupné hodnoty), se mohou chovat odlišně. Kubernetes také používá časové pásmo controller-manageru (obvykle UTC), nikoli místní časové pásmo uzlu. Vždy ověřujte výraz vůči konkrétnímu plánovači, do kterého nasazujete.
Jak ověřovat cron výrazy v CI/CD pipeline?
Přidejte krok ověření, který se spustí před nasazením. V projektu Node.js použijte cron-parser nebo cron-validator v testovacím souboru, který čte cron řetězce z konfigurace a ověřuje, zda se zpracují bez chyby. V Pythonu použijte croniter.is_valid(). Ve shellovém skriptu zavolejte funkci pro ověření a ukončete skript s nenulovým kódem při selhání. Tím zachytíte překlepy a chyby kopírování předtím, než se dostanou do produkce.
Jaký je rozdíl mezi ověřováním a lintingem cron výrazů?
Ověřování kontroluje, zda je výraz syntakticky správný: správný počet polí, hodnoty v rozsahu, platné operátory. Linting jde dále a kontroluje pravděpodobné chyby, které jsou technicky platné: plánování, která se nikdy nespustí (31. února), překrývající se úlohy, krokové hodnoty přeskakující očekávané intervaly (*/7 se resetuje každou hodinu) nebo plánování bez dokumentace časového pásma. Ověřování odpovídá na otázku 'zpracuje se to?', linting na otázku 'je to pravděpodobně to, co jste chtěli?'