Parser di Espressioni Cron
Analizza espressioni cron in descrizioni leggibili e visualizza i prossimi orari di esecuzione
Espressione cron
minute hour day(month) month day(week)
Descrizione leggibile
At 9:00 AM, Mon, Tue, Wed, Thu, Fri
Dettaglio dei campi
Minute
0
0–59
Hour
9
0–23
Day (month)
*
1–31
Month
*
1–12
Day (week)
1-5
0–6
Prossime 10 esecuzioni pianificate
Cos'è il Parsing delle Espressioni Cron?
Un'espressione cron è una stringa di cinque campi separati da spazi che definisce una pianificazione ricorrente. Il formato è nato nel demone Unix cron, scritto per la prima volta da Ken Thompson per Version 7 Unix nel 1979. Ogni campo rappresenta un'unità di tempo: minuto, ora, giorno del mese, mese e giorno della settimana. Analizzare un'espressione cron significa convertire questa notazione compatta in una descrizione leggibile e in un elenco concreto di prossimi orari di esecuzione.
Il formato standard a cinque campi è utilizzato da crontab su Linux e macOS, da piattaforme CI/CD come GitHub Actions e GitLab CI, dagli scheduler cloud di AWS (EventBridge), Google Cloud Scheduler e Azure Functions, e dalle librerie di job scheduling in tutti i principali linguaggi di programmazione. Alcuni sistemi estendono il formato a sei o sette campi aggiungendo un campo per i secondi o per l'anno, ma il layout a cinque campi definito da POSIX rimane la base condivisa da tutte le implementazioni.
Analizzare le espressioni cron a mano è soggetto a errori. L'interazione tra i campi crea pianificazioni non intuitive: 0 9 1-7 * 1 non significa 'ogni lunedì della prima settimana', ma piuttosto 'dall'1 al 7 di ogni mese OPPURE qualsiasi lunedì'. Un parser cron elimina questa ambiguità espandendo ogni campo, applicando le regole di combinazione e producendo i timestamp effettivi in cui il job verrà eseguito.
Perché Usare Questo Parser Cron?
Leggere un'espressione cron come 30 */6 1,15 * * da un file di configurazione e sapere esattamente quando si attiva richiede calcoli mentali su cinque campi. Questo parser lo fa all'istante.
Casi d'Uso del Parser Cron
Riferimento alla Sintassi delle Espressioni Cron
Un'espressione cron standard ha cinque campi separati da spazi. Ogni campo accetta interi, wildcards, intervalli, liste e valori di step. La tabella seguente mostra l'intervallo consentito e gli operatori per ogni campo.
| Campo | Intervallo | Operatori | Descrizione |
|---|---|---|---|
| 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) |
Quattro caratteri speciali controllano come i valori vengono abbinati all'interno di ogni campo:
| Char | Nome | Comportamento |
|---|---|---|
| * | 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." |
Ecco le espressioni cron più comuni che coprono la maggior parte delle esigenze di pianificazione:
| Espressione | Pianificazione |
|---|---|
| * * * * * | 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 |
Esempi di Codice
Come analizzare espressioni cron e calcolare i prossimi orari di esecuzione nei linguaggi più diffusi:
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"