Co je generátor cron výrazů?
Generátor cron výrazů je nástroj, který sestavuje řetězce cron plánování prostřednictvím vizuálního rozhraní, aniž byste je museli psát ručně. Cron výrazy jsou pětipolicové řetězce (minuta, hodina, den v měsíci, měsíc, den v týdnu), které definují, kdy má opakující se úloha běžet. Formát pochází z původního unixového démona cron z roku 1979 a dnes se používá v crontab, Kubernetes CronJobs, GitHub Actions, AWS EventBridge, Google Cloud Scheduler a desítkách knihoven pro plánování úloh.
Psaní cron výrazů z paměti je běžným zdrojem chyb. Pět polí se vzájemně ovlivňuje neintuitivními způsoby: kroková hodnota jako */15 v poli minut produkuje spuštění v 0, 15, 30 a 45, zatímco 5/15 začíná v minutě 5 a dává 5, 20, 35, 50. Kombinace dne v měsíci a dne v týdnu s hodnotami, které nejsou zástupnými znaky, vytváří podmínku OR, nikoliv AND, což překvapí i zkušené inženýry. Vizuální generátor tuto nejednoznačnost odstraňuje tím, že vám umožní vybrat požadované plánování a automaticky vytvoří správnou syntaxi.
Generátor cron výrazů se liší od parseru cron výrazů. Parser vezme existující výraz a vysvětlí ho srozumitelně. Generátor pracuje v opačném směru: popíšete plánování, které potřebujete, a nástroj vypíše odpovídající cron řetězec. Generátor používejte při vytváření nové naplánované úlohy; parser při auditování nebo ladění stávajících.
Proč použít tento generátor cron výrazů?
Psaní cron výrazu ručně znamená zapamatovat si pořadí polí, rozsahy hodnot a pravidla operátorů. Jediné chybně umístěné pole změní denní úlohu na úlohu spouštěnou každou minutu. Tento generátor vám umožní vizuálně zvolit plánování a výsledek zkopírovat jedním kliknutím.
Případy použití generátoru cron výrazů
Běžné přednastavené cron plánování
Tabulka níže uvádí cron výrazy pro nejčastěji používaná plánování. Většina produkčních úloh spadá do jednoho z těchto vzorů. Upravte jednotlivá pole podle svého konkrétního načasování.
| Plánování | Výraz | Typické použití |
|---|---|---|
| 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 |
Stavební kameny cron výrazů
Každý cron výraz má přesně pět polí, čtených zleva doprava. Každé pole přijímá konkrétní hodnoty a operátory. Znalost těchto pravidel stačí k zapsání jakéhokoli plánování, se kterým se v produkci setkáte.
Čtyři operátory řídí, jak jsou hodnoty porovnávány v každém poli. Lze je kombinovat: 1-5/2 v poli dne v týdnu znamená pondělí, středa, pátek (rozsah 1-5, krok 2).
| Operátor | Syntaxe | Příklad | Výsledek |
|---|---|---|---|
| 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 |
Příklady kódu
Jak vytvořit a zaregistrovat cron plánování v Node.js, Pythonu, Go a 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