Generator wyrażeń Cron

Generuj wyrażenia cron wizualnie za pomocą konstruktora krok po kroku

Szybkie ustawienia

Minuta

Godzina

Dzień miesiąca

Miesiąc

Dzień tygodnia

Wyrażenie cron

0 9 * * *

minute hour day(month) month day(week)

Czym jest generator wyrażeń cron?

Generator wyrażeń cron to narzędzie, które buduje ciągi harmonogramu cron za pomocą wizualnego interfejsu, zamiast wymagać ręcznego pisania. Wyrażenia cron to ciągi pięciu pól (minuta, godzina, dzień miesiąca, miesiąc, dzień tygodnia), które określają, kiedy ma być uruchamiane cykliczne zadanie. Format ten wywodzi się z oryginalnego demona cron systemu Unix z 1979 roku i jest obecnie używany w crontab, Kubernetes CronJobs, GitHub Actions, AWS EventBridge, Google Cloud Scheduler oraz dziesiątkach bibliotek do planowania zadań.

Pisanie wyrażeń cron z pamięci to częste źródło błędów. Pięć pól oddziałuje na siebie w nieoczywisty sposób: wartość kroku */15 w polu minut daje uruchomienia o 0, 15, 30 i 45, natomiast 5/15 zaczyna od minuty 5 i daje 5, 20, 35, 50. Połączenie dnia-miesiąca i dnia-tygodnia z wartościami innymi niż symbol wieloznaczny tworzy warunek LUB, a nie I — co zaskakuje nawet doświadczonych inżynierów. Wizualny generator usuwa tę niejednoznaczność, pozwalając wybrać żądany harmonogram i automatycznie generując poprawną składnię.

Generator cron różni się od parsera cron. Parser pobiera istniejące wyrażenie i wyjaśnia je w zrozumiałym języku. Generator działa w przeciwnym kierunku: opisujesz potrzebny harmonogram, a narzędzie zwraca pasujący ciąg cron. Używaj generatora podczas tworzenia nowego zaplanowanego zadania; parsera używaj podczas audytowania lub debugowania istniejących.

Dlaczego warto używać tego generatora cron?

Ręczne budowanie wyrażenia cron wymaga zapamiętania kolejności pól, zakresów wartości i reguł operatorów. Jedno przesunięte pole zmienia zadanie dzienne w takie, które uruchamia się co minutę. Ten generator pozwala wybrać harmonogram wizualnie i skopiować wynik jednym kliknięciem.

🖱️
Wizualny konstruktor harmonogramu
Wybieraj wartości minut, godzin, dni, miesięcy i dni tygodnia z list rozwijanych i przełączników. Wyrażenie cron aktualizuje się w czasie rzeczywistym przy każdej zmianie pola. Nie trzeba zapamiętywać składni.
🔒
Przetwarzanie z zachowaniem prywatności
Cały proces generowania odbywa się w przeglądarce. Żadne dane harmonogramu nie są wysyłane na serwer. Wyrażenia cron i konfiguracje zadań pozostają na Twoim urządzeniu.
Natychmiastowy wynik z podglądem
W trakcie budowania widzisz wygenerowane wyrażenie cron oraz podgląd kolejnych zaplanowanych uruchomień. Zweryfikuj poprawność harmonogramu przed wklejeniem go do konfiguracji.
📋
Bez rejestracji
Otwórz stronę i zacznij budować. Bez logowania, bez klucza API, bez instalacji. Działa na każdym urządzeniu z nowoczesną przeglądarką, w tym na urządzeniach mobilnych.

Przypadki użycia generatora cron

Frontend developer
Buduj wyrażenia cron dla paneli administracyjnych i interfejsów harmonogramowania. Generuj poprawną składnię dla widocznych dla użytkownika narzędzi wyboru harmonogramu, które przechowują ciągi cron w bazie danych.
Backend engineer
Twórz wyrażenia cron dla kolejek zadań takich jak Celery, Sidekiq i Bull. Wygeneruj ciąg harmonogramu, zweryfikuj kolejne uruchomienia i wklej go do konfiguracji zadania.
DevOps / SRE
Generuj harmonogramy cron dla Kubernetes CronJobs, potoków CI/CD i automatyzacji infrastruktury. Twórz wyrażenia dla okien kopii zapasowych, odnawiania certyfikatów i rotacji logów bez błędów składniowych.
QA engineer
Twórz testowe wyrażenia cron wyzwalające się w określonych interwałach na potrzeby testów integracyjnych. Generuj harmonogramy o przewidywalnych czasach uruchomień, aby weryfikować zachowanie harmonogramera.
Data engineer
Buduj wyrażenia cron dla wyzwalaczy potoków ETL i harmonogramów synchronizacji danych. Generuj nienakładające się harmonogramy dla etapów ekstrakcji, transformacji i ładowania z precyzyjnym taktowaniem.
Student / uczący się
Ucz się składni cron, eksperymentując z wizualnym konstruktorem. Zmieniaj poszczególne pola i obserwuj, jak zmienia się wyrażenie i czasy kolejnych uruchomień. Buduj intuicję dotyczącą symboli wieloznacznych, zakresów i wartości kroków.

Typowe ustawienia wstępne harmonogramów cron

Poniższa tabela zawiera wyrażenia cron dla najczęściej używanych harmonogramów. Większość zadań produkcyjnych mieści się w jednym z tych wzorców. Dostosuj poszczególne pola do swoich rzeczywistych potrzeb czasowych.

HarmonogramWyrażenieTypowe zastosowanie
Every minute* * * * *Health checks, queue polling
Every 5 minutes*/5 * * * *Metrics collection, cache refresh
Every 15 minutes*/15 * * * *API sync, dashboard updates
Every hour0 * * * *Log rotation, report generation
Every 6 hours0 */6 * * *Database backups, digest emails
Daily at midnight0 0 * * *Nightly batch jobs, cleanup scripts
Daily at 9 AM0 9 * * *Daily reports, notification digests
Weekdays at 9 AM0 9 * * 1-5Business-hours tasks, standup reminders
Every Monday at midnight0 0 * * 1Weekly reports, dependency updates
First of every month0 0 1 * *Billing runs, monthly aggregation
Every Sunday at 2:30 AM30 2 * * 0Full backups during low-traffic window
January 1st at midnight0 0 1 1 *Annual reports, license renewals

Elementy składowe wyrażeń cron

Każde wyrażenie cron ma dokładnie pięć pól czytanych od lewej do prawej. Każde pole przyjmuje określone wartości i operatory. Znajomość tych reguł wystarczy, by napisać dowolny harmonogram spotykany na produkcji.

Układ pięcio-polowego wyrażenia cron:
*min0-59
*hour0-23
*day1-31
*month1-12
*weekday0-6

Cztery operatory kontrolują sposób dopasowywania wartości w każdym polu. Można je łączyć: 1-5/2 w polu dnia-tygodnia oznacza poniedziałek, środę, piątek (zakres 1-5, krok 2).

OperatorSkładniaPrzykładDaje
Wildcard** (minute)Every minute
Lista,b,c1,15 (day)1st and 15th
Rangea-b9-17 (hour)9 AM through 5 PM
Step*/n*/10 (minute)Every 10 minutes
Range+Stepa-b/n10-30/5 (min)10, 15, 20, 25, 30

Przykłady kodu

Jak tworzyć i rejestrować harmonogramy cron w Node.js, Python, Go i bash:

JavaScript (Node.js)
import { CronJob } from 'cron';

// Build a cron expression: every weekday at 9:00 AM
const expression = '0 9 * * 1-5';

const job = new CronJob(expression, () => {
  console.log('Running weekday morning task');
});
job.start();

// Programmatic expression building
function buildCron({ minute = '*', hour = '*', dom = '*', month = '*', dow = '*' }) {
  return `${minute} ${hour} ${dom} ${month} ${dow}`;
}

const expr = buildCron({ minute: '0', hour: '*/6', dow: '1-5' });
console.log(expr); // → "0 */6 * * 1-5"
Python
from crontab import CronTab

# Create a new cron job for the current user
cron = CronTab(user=True)

# Build a job: run backup.py every day at 2:30 AM
job = cron.new(command='python3 /home/user/backup.py')
job.setall('30 2 * * *')

print(job)           # → 30 2 * * * python3 /home/user/backup.py
print(job.is_valid()) # → True

# Schedule every 15 minutes on weekdays
job2 = cron.new(command='/usr/bin/sync-data')
job2.minute.every(15)
job2.dow.during('MON', 'FRI')

cron.write()  # Save to user's crontab

# Verify next run time
from croniter import croniter
from datetime import datetime

it = croniter('30 2 * * *', datetime.now())
print(it.get_next(datetime))  # → next 2:30 AM timestamp
Go
package main

import (
    "fmt"
    "strings"
    "github.com/robfig/cron/v3"
)

// BuildCron constructs a 5-field cron expression from parts
func BuildCron(minute, hour, dom, month, dow string) string {
    fields := []string{minute, hour, dom, month, dow}
    return strings.Join(fields, " ")
}

func main() {
    // Generate: every weekday at 9 AM
    expr := BuildCron("0", "9", "*", "*", "1-5")
    fmt.Println(expr) // → 0 9 * * 1-5

    // Validate and schedule it
    c := cron.New()
    _, err := c.AddFunc(expr, func() {
        fmt.Println("Running scheduled task")
    })
    if err != nil {
        fmt.Printf("Invalid expression: %v\n", err)
        return
    }
    c.Start()
}
Bash (crontab)
# Open the crontab editor to add a new job
crontab -e

# Add a cron job without opening an editor:
# Run cleanup.sh every Sunday at 3 AM
(crontab -l 2>/dev/null; echo "0 3 * * 0 /home/user/cleanup.sh") | crontab -

# Generate and add a job: every 10 minutes, log disk usage
EXPR="*/10 * * * *"
CMD="df -h >> /var/log/disk-usage.log"
(crontab -l 2>/dev/null; echo "$EXPR $CMD") | crontab -

# Verify the job was added
crontab -l | tail -1
# → */10 * * * * df -h >> /var/log/disk-usage.log

# Remove all cron jobs (use with caution)
# crontab -r

Często zadawane pytania

Jaka jest prawidłowa kolejność pól w wyrażeniu cron?
Standardowa kolejność pięciu pól to: minuta (0-59), godzina (0-23), dzień miesiąca (1-31), miesiąc (1-12), dzień tygodnia (0-6, gdzie 0 to niedziela). Kolejność ta jest zdefiniowana przez POSIX i używana przez crontab, Kubernetes, GitHub Actions oraz większość bibliotek cron. Niektóre narzędzia jak Quartz Scheduler dodają pole sekund na początku, tworząc sześć pól, ale układ pięcio-polowy jest powszechnym domyślnym standardem.
Jak wygenerować wyrażenie cron dla 'co N minut'?
Użyj operatora kroku w polu minut: */N. Dla co 5 minut napisz */5 * * * *. Dla co 15 minut napisz */15 * * * *. Operator kroku równomiernie dzieli zakres pola. Zwróć uwagę, że */7 nie daje uruchomień co 7 minut przez granice godzin; daje uruchomienia w minutach 0, 7, 14, 21, 28, 35, 42, 49, 56, a następnie resetuje się do 0 na początku kolejnej godziny.
Czy można wygenerować wyrażenie cron uruchamiane ostatniego dnia każdego miesiąca?
Standardowy cron POSIX nie ma operatora 'ostatni dzień miesiąca'. Nie można napisać 0 0 L * * w crontab ani w Kubernetes CronJobs. Obejścia to planowanie na dni 28-31 z dodaniem sprawdzenia w powłoce ([ $(date +%d -d tomorrow) -eq 01 ]) lub użycie rozszerzonej implementacji cron, takiej jak Quartz, obsługującej modyfikator L. Wyrażenia rate AWS EventBridge mogą też natywnie wskazywać ostatni dzień miesiąca.
Jaka jest różnica między generatorem cron a parserem cron?
Generator cron przyjmuje wymagania harmonogramowania (np. 'każdy dzień roboczy o 9:00') i zwraca poprawne wyrażenie cron (0 9 * * 1-5). Parser cron działa odwrotnie: pobiera istniejące wyrażenie i tworzy czytelny opis. Używaj generatora podczas tworzenia nowych harmonogramów. Używaj parsera podczas przeglądania lub debugowania istniejących.
Jak unikać nakładających się zadań cron?
Cron sam w sobie nie zapobiega nakładającym się uruchomieniom. Jeśli zadanie zaplanowane na co minutę trwa 90 sekund, uruchomią się dwie jego instancje jednocześnie. Aby temu zapobiec, użyj pliku blokady (flock w bash), rozproszonej blokady (Redis, etcd) lub wbudowanej polityki współbieżności harmonogramera. Kubernetes CronJobs ma pole concurrencyPolicy, które można ustawić na Forbid lub Replace. W harmonogramerach na poziomie aplikacji, takich jak Celery, użyj puli solo lub blokady na poziomie zadania.
Czy 0, czy 1 to pierwszy dzień tygodnia w cron?
W cron POSIX 0 to niedziela, a 6 to sobota. Zarówno 0, jak i 7 reprezentują niedzielę w większości implementacji. Quartz Scheduler używa innej konwencji, gdzie 1 to niedziela, a 7 to sobota. Jeśli Twój system obsługuje nazwane dni (SUN, MON, TUE), używaj ich zamiast cyfr, aby unikać niejednoznaczności między platformami.
Jak wygenerować wyrażenie cron dla konkretnej strefy czasowej?
Tradycyjny crontab używa lokalnej strefy czasowej systemu. W niektórych systemach możesz ustawić zmienną TZ w pliku crontab (TZ=America/New_York). Kubernetes CronJobs obsługuje pole .spec.timeZone od wersji 1.25. AWS EventBridge i Google Cloud Scheduler pozwalają określić strefę czasową dla każdego harmonogramu osobno. Zawsze dokumentuj oczekiwaną strefę czasową obok wyrażenia cron w swojej konfiguracji.