Walidator wyrażeń Cron

Waliduj wyrażenia cron i uzyskaj szczegółowy podział pole po polu

Wypróbuj przykład

Wyrażenie cron

minute hour day(month) month day(week)

Prawidłowe wyrażenie cron

Podział pól

Minute*/15(0–59)

Rozwinięcie: 0, 15, 30, 45

Hour0-6(0–23)

Rozwinięcie: 0, 1, 2, 3, 4, 5, 6

Day of month1,15(1–31)

Rozwinięcie: 1, 15

Month*(1–12)

Rozwinięcie: all (1–12)

Day of week1-5(0–6)

Rozwinięcie: 1, 2, 3, 4, 5

Czym jest walidacja wyrażeń cron?

Walidacja wyrażeń cron to proces sprawdzania, czy ciąg cron spełnia poprawne reguły składniowe, zanim trafi do harmonogramera. Wyrażenie cron składa się z pięciu pól oddzielonych spacjami (minuta, godzina, dzień-miesiąca, miesiąc, dzień-tygodnia), które definiują harmonogram cykliczny. Jeśli którekolwiek pole zawiera wartość spoza dopuszczalnego zakresu, nieprawidłowy operator lub błąd strukturalny — na przykład niewłaściwą liczbę pól — wyrażenie zostanie odrzucone przez harmonogramer w momencie wdrożenia albo po cichu nie dopasuje żadnego czasu wyzwalacza.

Walidacja wyrażenia cron online pozwala wychwycić błędy wcześniej niż wdrożenie na produkcji i oczekiwanie na pominięte zadanie. Typowe pomyłki to: wpisanie 25 w polu godziny (dopuszczalny zakres: 0-23), użycie kroku zero (*/0, co jest niezdefiniowane), odwrócenie granic zakresu (5-1 zamiast 1-5) lub dodanie dodatkowych pól charakterystycznych dla niestandardowych formatów, takich jak Quartz. Walidator natychmiast sygnalizuje te problemy i wskazuje dokładnie, które pole jest niepoprawne.

Walidacja cron różni się od parsowania cron. Parser przyjmuje poprawne wyrażenie i tłumaczy je na czytelny opis harmonogramu. Walidator odpowiada na prostsze pytanie: czy to wyrażenie jest poprawnie zbudowane? Waliduj przed parsowaniem — przekazywanie nieprawidłowego wyrażenia do harmonogramera nie ma sensu. W potokach CI/CD automatyczna walidacja cron zapobiega trafianiu uszkodzonych harmonogramów do plików konfiguracyjnych.

Dlaczego warto używać tego walidatora cron?

Wyrażenie cron podlega ścisłym regułom składniowym, a harmonogramery zwracają niespójne komunikaty błędów, gdy te reguły są naruszane. Niektóre harmonogramery odrzucają wyrażenie z niejasnym błędem, inne przyjmują je po cichu i nigdy nie wykonują. Ten walidator dostarcza przejrzystej diagnozy pole po polu, zanim przeprowadzisz wdrożenie.

Natychmiastowe sprawdzanie składni
Wklej lub wpisz wyrażenie cron i natychmiast sprawdź, czy przechodzi walidację. Bez wysyłania formularza, bez opóźnienia. Wynik aktualizuje się w trakcie pisania.
🔒
Przetwarzanie z zachowaniem prywatności
Walidacja odbywa się całkowicie w przeglądarce. Twoje wyrażenia cron i konfiguracje harmonogramów nigdy nie są wysyłane na serwer ani nigdzie przechowywane.
🔍
Raportowanie błędów pole po polu
Gdy wyrażenie jest nieprawidłowe, walidator wskazuje, które pole spowodowało błąd i dlaczego. Koniec z zgadywaniem, które z pięciu pól jest problematyczne.
📋
Bez rejestracji
Otwórz stronę i zacznij sprawdzać. Bez logowania, bez klucza API, bez instalacji. Działa na każdym urządzeniu z nowoczesną przeglądarką, włącznie z urządzeniami mobilnymi.

Przypadki użycia walidatora cron

Frontend developer
Waliduj wyrażenia cron wprowadzane przez użytkowników w interfejsach harmonogramowania przed zapisaniem ich do bazy danych. Wychwytuj błędy składniowe po stronie klienta zamiast czekać na odrzucenie przez backend.
Backend engineer
Sprawdzaj wyrażenia cron w konfiguracjach kolejek zadań (Celery beat, Hangfire, Quartz) podczas przeglądu kodu. Weryfikuj, czy zrefaktoryzowany ciąg harmonogramu nadal przechodzi walidację składni.
DevOps / SRE
Waliduj harmonogramy cron w manifestach Kubernetes CronJob i konfiguracjach potoków CI/CD przed ich zastosowaniem. Zapobiegaj sytuacji, w której literówka w harmonogramie kopii zapasowych pozostaje niezauważona aż do momentu pominięcia kopii.
QA engineer
Testuj, czy aplikacja poprawnie odrzuca nieprawidłowe dane wejściowe cron. Generuj znane błędne wyrażenia (wartości spoza zakresu, nieprawidłowa liczba pól) i potwierdzaj, że obsługa błędów działa poprawnie.
Data engineer
Waliduj wyzwalacze cron dla DAG-ów Airflow i zaplanowanych uruchomień dbt. Potwierdzaj, że harmonogramy potoków wczytane z plików konfiguracyjnych YAML lub JSON są składniowo poprawne przed wdrożeniem.
Student / uczący się
Eksperymentuj ze składnią cron i uzyskuj natychmiastową informację zwrotną o tym, co jest poprawne, a co powoduje błąd. Ucz się zakresów pól, operatorów i przypadków granicznych, testując wyrażenia i czytając komunikaty błędów.

Typowe błędy składni cron

Poniższa tabela zawiera najczęstsze błędy wyrażeń cron i ich przyczyny. To pomyłki, które regularnie pojawiają się w konfiguracjach produkcyjnych i potokach CI/CD.

Typ błęduPrzykładCo poszło nie tak
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.

Poprawne vs. niepoprawne wyrażenia cron

Krótki przewodnik po poprawnie zbudowanych wyrażeniach zestawionych z typowymi błędami. Użyj go, aby szybko sprawdzić wyrażenie przed wklejeniem go do konfiguracji harmonogramera.

Poprawne wyrażenia
* * * * *
0 9 * * 1-5
*/15 * * * *
0 0 1,15 * *
30 2 * * 0
0 */6 * * *
Niepoprawne wyrażenia
0 9 * *4 pola, potrzeba 5
0 25 * * *godzina maks. wynosi 23
*/0 * * * *krok nie może wynosić 0
0 9 * * 8dzień-tygodnia maks. wynosi 6
60 * * * *minuta maks. wynosi 59
0 0 0 * *dzień-miesiąca min. wynosi 1

Przykłady kodu

Jak programowo walidować wyrażenia cron w JavaScript, Python, Go i Bash. Każdy przykład pokazuje, jak przechwycić nieprawidłową składnię i uzyskać czytelny komunikat błędu.

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"

Często zadawane pytania

Co sprawia, że wyrażenie cron jest nieprawidłowe?
Wyrażenie cron jest nieprawidłowe, gdy narusza reguły składniowe formatu pięciu pól. Typowe przyczyny: nieprawidłowa liczba pól (mniej niż 5 lub więcej niż 5 w standardowym cron), wartość poza dopuszczalnym zakresem (np. godzina 25, minuta 60, dzień-miesiąca 0), krok zero (*/0), odwrócone granice zakresu (5-1) lub nierozpoznane znaki. Wyrażenie musi składać się z dokładnie pięciu pól oddzielonych spacjami, z poprawnymi wartościami i operatorami w każdym.
Czy wyrażenie cron jest poprawne, jeśli nigdy się nie wyzwala?
Tak, pod względem składniowym. Wyrażenie takie jak 0 0 31 2 * (31 lutego) przechodzi walidację składni, ponieważ każde pole zawiera wartości w dopuszczalnym zakresie. Nie wyzwoli się jednak nigdy, bo luty nigdy nie ma 31 dni. Większość walidatorów sprawdza wyłącznie składnię, nie poprawność semantyczną. Aby wykryć harmonogramy nieosiągalne, oblicz N kolejnych czasów uruchomień i sprawdź, czy lista jest pusta.
Jak walidować wyrażenie cron z 6 lub 7 polami?
Standardowy cron POSIX używa 5 pól. Quartz Scheduler dodaje pole sekund na początku (6 pól) oraz opcjonalne pole roku na końcu (7 pól). AWS EventBridge używa 6 pól. Ten walidator sprawdza standardowy format 5-polowy. Do walidacji wyrażeń Quartz lub EventBridge użyj biblioteki obsługującej rozszerzony format, np. cron-parser z opcją extended w Node.js lub quartz-cron w Java.
Czy można używać nazw dni i miesięcy w wyrażeniach cron?
Większość implementacji cron akceptuje trzyliterowe angielskie skróty miesięcy (JAN-DEC) oraz dni tygodnia (SUN-SAT). W crontab są one nierozróżniające wielkości liter, ale w innych systemach mogą być rozróżniające. Nazwanych wartości nie można używać w zakresach na wszystkich platformach: MON-FRI działa w crontab, ale nie w każdej bibliotece. Jeśli przenośność jest istotna, używaj wartości numerycznych (1-5 dla poniedziałku do piątku).
Dlaczego moje wyrażenie cron działa w crontab, ale nie w Kubernetes?
Kubernetes CronJobs używa tego samego formatu 5-polowego co crontab, ale wyrażenia są parsowane przez bibliotekę Go cron, która ma bardziej rygorystyczną walidację. Wyrażenia tolerowane przez crontab (np. końcowe białe znaki lub jednoczesne ustawienie pól dzień-miesiąca i dzień-tygodnia na wartości inne niż wildcard) mogą zachowywać się inaczej. Kubernetes domyślnie używa też strefy czasowej kontrolera (zazwyczaj UTC), a nie lokalnej strefy węzła. Zawsze waliduj wyrażenie pod kątem konkretnego harmonogramera, do którego wdrażasz.
Jak walidować wyrażenia cron w potoku CI/CD?
Dodaj krok walidacji uruchamiany przed wdrożeniem. W projekcie Node.js użyj cron-parser lub cron-validator w pliku testowym, który wczytuje ciągi cron z konfiguracji i sprawdza, czy parsują się bez błędu. W Python użyj croniter.is_valid(). W skrypcie powłoki wywołaj funkcję walidacji i wyjdź z kodem niezerowym w przypadku niepowodzenia. To wychwytuje literówki i błędy kopiowania przed trafieniem na produkcję.
Jaka jest różnica między walidacją a lintowaniem cron?
Walidacja sprawdza, czy wyrażenie jest składniowo poprawne: właściwa liczba pól, wartości w zakresie, prawidłowe operatory. Lintowanie idzie dalej i wykrywa prawdopodobne błędy, które są technicznie poprawne: harmonogramy, które nigdy się nie wyzwolą (31 lutego), nakładające się zadania, wartości kroków pomijające oczekiwane interwały (*/7 resetuje się co godzinę) lub harmonogramy bez dokumentacji strefy czasowej. Walidacja odpowiada na pytanie: 'czy to zostanie sparsowane?'. Lintowanie odpowiada na pytanie: 'czy to jest prawdopodobnie to, o co ci chodziło?'