Cron Expression Parser
Analysiert Cron-Ausdrücke in menschenlesbare Beschreibungen und zeigt die nächsten Ausführungszeiten an
Cron-Ausdruck
minute hour day(month) month day(week)
Menschenlesbare Beschreibung
At 9:00 AM, Mon, Tue, Wed, Thu, Fri
Feldaufschlüsselung
Minute
0
0–59
Hour
9
0–23
Day (month)
*
1–31
Month
*
1–12
Day (week)
1-5
0–6
Nächste 10 geplante Ausführungen
Was ist das Parsen von Cron-Ausdrücken?
Ein Cron-Ausdruck ist eine Zeichenkette aus fünf leerzeichengetrennten Feldern, die einen wiederkehrenden Zeitplan definiert. Das Format entstammt dem Unix-Cron-Daemon, der erstmals von Ken Thompson für Version 7 Unix im Jahr 1979 entwickelt wurde. Jedes Feld steht für eine Zeiteinheit: Minute, Stunde, Tag des Monats, Monat und Wochentag. Das Parsen eines Cron-Ausdrucks bedeutet, diese kompakte Notation in eine menschenlesbare Beschreibung und eine konkrete Liste bevorstehender Ausführungszeiten umzuwandeln.
Das Standard-Fünf-Felder-Format wird von crontab unter Linux und macOS verwendet, von CI/CD-Plattformen wie GitHub Actions und GitLab CI, von Cloud-Schedulern in AWS (EventBridge), Google Cloud Scheduler und Azure Functions sowie von Job-Scheduling-Bibliotheken in allen wichtigen Programmiersprachen. Einige Systeme erweitern das Format auf sechs oder sieben Felder, indem sie ein Sekunden- oder Jahresfeld hinzufügen, aber das von POSIX definierte Fünf-Felder-Layout bleibt die Grundlage, die alle Implementierungen gemeinsam haben.
Cron-Ausdrücke von Hand zu parsen ist fehleranfällig. Das Zusammenspiel der Felder erzeugt nicht offensichtliche Zeitpläne: 0 9 1-7 * 1 bedeutet nicht „jeden Montag in der ersten Woche“, sondern „vom 1. bis 7. jeden Monats ODER jeden Montag“. Ein Cron-Parser beseitigt diese Mehrdeutigkeit, indem er jedes Feld auswertet, die Kombinationsregeln anwendet und die tatsächlichen Zeitstempel der Jobausführung ermittelt.
Warum diesen Cron Parser verwenden?
Einen Cron-Ausdruck wie 30 */6 1,15 * * aus einer Konfigurationsdatei zu lesen und genau zu wissen, wann er ausgeführt wird, erfordert gedankliche Arithmetik über fünf Felder hinweg. Dieser Parser erledigt diese Arbeit sofort.
Anwendungsfälle für den Cron Parser
Cron-Ausdrucks-Syntaxreferenz
Ein Standard-Cron-Ausdruck hat fünf leerzeichengetrennte Felder. Jedes Feld akzeptiert Ganzzahlen, Wildcards, Bereiche, Listen und Step-Werte. Die folgende Tabelle zeigt den erlaubten Bereich und die Operatoren für jedes Feld.
| Feld | Bereich | Operatoren | Beschreibung |
|---|---|---|---|
| Minute | 0–59 | * , - / | Minute within the hour |
| Hour | 0–23 | * , - / | Hour of the day (24-hour) |
| Day (month) | 1–31 | * , - / | Day of the month |
| Month | 1–12 | * , - / | Month of the year (or JAN–DEC) |
| Day (week) | 0–6 | * , - / | Day of the week (0 = Sunday, or SUN–SAT) |
Vier Sonderzeichen steuern, wie Werte innerhalb eines Feldes abgeglichen werden:
| Zeichen | Name | Verhalten |
|---|---|---|
| * | Wildcard | Matches every possible value in the field. * in the minute field means "every minute." |
| , | List | Separates individual values. 1,15 in the day field means "the 1st and 15th." |
| - | Range | Defines an inclusive range. 1-5 in the day-of-week field means "Monday through Friday." |
| / | Step | Defines an interval. */10 in the minute field means "every 10 minutes." 5/15 means "5, 20, 35, 50." |
Hier sind häufige Cron-Ausdrücke, die die meisten Planungsanforderungen abdecken:
| Ausdruck | Zeitplan |
|---|---|
| * * * * * | Every minute |
| 0 * * * * | Every hour (at minute 0) |
| */15 * * * * | Every 15 minutes |
| 0 9 * * * | Every day at 9:00 AM |
| 0 9 * * 1-5 | Weekdays at 9:00 AM |
| 30 2 * * 0 | Every Sunday at 2:30 AM |
| 0 0 1 * * | First day of every month at midnight |
| 0 0 * * 1 | Every Monday at midnight |
| 0 0 1 1 * | January 1st at midnight (yearly) |
| 0 */6 * * * | Every 6 hours |
| 5,35 * * * * | At minute 5 and 35 of every hour |
| 0 9-17 * * 1-5 | Every hour from 9 AM to 5 PM, weekdays |
Code-Beispiele
Cron-Ausdrücke parsen und nächste Ausführungszeiten berechnen in gängigen Sprachen:
import cronstrue from 'cronstrue';
// Parse cron to human-readable text
cronstrue.toString('0 9 * * 1-5');
// → "At 09:00 AM, Monday through Friday"
cronstrue.toString('*/15 * * * *');
// → "Every 15 minutes"
// Validate with cron-parser and get next run times
import { parseExpression } from 'cron-parser';
const interval = parseExpression('30 2 * * 0');
console.log(interval.next().toISOString());
// → next Sunday at 02:30 UTC
// Iterate over the next 5 runs
for (let i = 0; i < 5; i++) {
console.log(interval.next().toString());
}from crontab import CronTab
from croniter import croniter
from datetime import datetime
# Parse and describe a cron expression
cron = CronTab('0 9 * * 1-5')
print(cron.next(default_utc=True))
# → seconds until next run
# Get the next 5 run times with croniter
base = datetime.now()
cron_iter = croniter('0 9 * * 1-5', base)
for _ in range(5):
print(cron_iter.get_next(datetime))
# → next 5 weekday 09:00 timestamps
# Check if a specific time matches
print(croniter.match('*/15 * * * *', datetime(2026, 3, 25, 10, 30)))
# → True (minute 30 is divisible by 15)package main
import (
"fmt"
"time"
"github.com/robfig/cron/v3"
)
func main() {
// Parse a standard 5-field cron expression
parser := cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow)
schedule, err := parser.Parse("0 9 * * 1-5")
if err != nil {
panic(err)
}
// Calculate the next 5 run times
now := time.Now()
for i := 0; i < 5; i++ {
now = schedule.Next(now)
fmt.Println(now)
}
// → next 5 weekday 09:00 timestamps
}# List current user's cron jobs crontab -l # Edit cron jobs interactively crontab -e # Add a job: run backup.sh every day at 2:30 AM # (append to crontab via pipe) (crontab -l 2>/dev/null; echo "30 2 * * * /home/user/backup.sh") | crontab - # Check syntax with a dry-run parse (requires cronie or busybox) # The system will reject invalid expressions when saving # View cron logs on systemd-based Linux journalctl -u cron --since "1 hour ago"