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.
Przypadki użycia generatora cron
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.
| Harmonogram | Wyrażenie | Typowe zastosowanie |
|---|---|---|
| Every minute | * * * * * | Health checks, queue polling |
| Every 5 minutes | */5 * * * * | Metrics collection, cache refresh |
| Every 15 minutes | */15 * * * * | API sync, dashboard updates |
| Every hour | 0 * * * * | Log rotation, report generation |
| Every 6 hours | 0 */6 * * * | Database backups, digest emails |
| Daily at midnight | 0 0 * * * | Nightly batch jobs, cleanup scripts |
| Daily at 9 AM | 0 9 * * * | Daily reports, notification digests |
| Weekdays at 9 AM | 0 9 * * 1-5 | Business-hours tasks, standup reminders |
| Every Monday at midnight | 0 0 * * 1 | Weekly reports, dependency updates |
| First of every month | 0 0 1 * * | Billing runs, monthly aggregation |
| Every Sunday at 2:30 AM | 30 2 * * 0 | Full backups during low-traffic window |
| January 1st at midnight | 0 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.
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).
| Operator | Składnia | Przykład | Daje |
|---|---|---|---|
| Wildcard | * | * (minute) | Every minute |
| List | a,b,c | 1,15 (day) | 1st and 15th |
| Range | a-b | 9-17 (hour) | 9 AM through 5 PM |
| Step | */n | */10 (minute) | Every 10 minutes |
| Range+Step | a-b/n | 10-30/5 (min) | 10, 15, 20, 25, 30 |
Przykłady kodu
Jak tworzyć i rejestrować harmonogramy cron w Node.js, Python, Go i bash:
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"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 timestamppackage 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()
}# 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