Cron Expression Parser
Tolka cron-uttryck till läsbara beskrivningar och förhandsgranska nästa körtider
Cron-uttryck
minute hour day(month) month day(week)
Läsbar beskrivning
At 9:00 AM, Mon, Tue, Wed, Thu, Fri
Fältuppdelning
Minute
0
0–59
Hour
9
0–23
Day (month)
*
1–31
Month
*
1–12
Day (week)
1-5
0–6
Nästa 10 schemalagda körningar
Vad är tolkning av cron-uttryck?
Ett cron-uttryck är en sträng med fem fält åtskilda av mellanslag som definierar ett återkommande schema. Formatet uppstod i Unix cron-demonen, som skrevs av Ken Thompson för Version 7 Unix år 1979. Varje fält representerar en tidsenhet: minut, timme, dag i månaden, månad och veckodag. Att tolka ett cron-uttryck innebär att omvandla denna kompakta notation till en läsbar beskrivning och en konkret lista över kommande körningstider.
Standardformatet med fem fält används av crontab på Linux och macOS, av CI/CD-plattformar som GitHub Actions och GitLab CI, av molnschemaläggare i AWS (EventBridge), Google Cloud Scheduler och Azure Functions, samt av jobbschemaläggningsbibliotek i alla större programmeringsspråk. Vissa system utökar formatet till sex eller sju fält genom att lägga till ett sekundfält eller ett årsfält, men den femfältslayout som definieras av POSIX är den gemensamma basen som alla implementationer delar.
Att tolka cron-uttryck för hand är felbenäget. Samspelet mellan fälten skapar icke-uppenbara scheman: 0 9 1-7 * 1 betyder inte 'varje måndag i den första veckan' utan snarare 'den 1:a till 7:e varje månad ELLER vilken måndag som helst.' En cron-tolk eliminerar denna tvetydighet genom att expandera varje fält, tillämpa kombinationsreglerna och producera de faktiska tidsstämplarna när jobbet kommer att köras.
Varför använda denna cron-tolk?
Att läsa ett cron-uttryck som 30 */6 1,15 * * från en konfigurationsfil och veta exakt när det körs kräver huvudräkning över fem fält. Denna tolk gör det arbetet direkt.
Användningsfall för cron-tolkaren
Syntaxreferens för cron-uttryck
Ett standard-cron-uttryck har fem blankstegsavgränsade fält. Varje fält accepterar heltal, jokertecken, intervall, listor och stegvärden. Tabellen nedan visar tillåtet intervall och operatorer för varje fält.
| Fält | Intervall | Operatorer | Beskrivning |
|---|---|---|---|
| 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) |
Fyra specialtecken styr hur värden matchas inom varje fält:
| Tecken | Namn | Beteende |
|---|---|---|
| * | 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." |
Här är vanliga cron-uttryck som täcker de flesta schemaläggningsbehov:
| Uttryck | Schema |
|---|---|
| * * * * * | 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 |
Kodexempel
Så här tolkar du cron-uttryck och beräknar nästa körtider i populära språk:
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"