Generatore Crontab e Costruttore di Espressioni Cron
Genera, valida e decodifica espressioni cron online nel browser. Anteprima live delle prossime esecuzioni in ora locale o UTC. Sintassi POSIX a 5 campi, preset e descrizione in italiano.
Descrizione leggibile
—
Prossime 5 esecuzioni pianificate
Cos'è un'espressione cron?
Un'espressione cron è una stringa a cinque campi che definisce una pianificazione ricorrente. Da sinistra a destra, i campi sono minuto (0-59), ora (0-23), giorno del mese (1-31), mese (1-12) e giorno della settimana (0-6, dove sia 0 sia 7 indicano domenica). Ogni campo accetta un valore, una lista (`1,3,5`), un intervallo (`1-5`), una wildcard (`*` con significato "qualsiasi valore") o un passo (`*/15` con significato "ogni 15"). La combinazione definisce esattamente quando il comando pianificato verrà eseguito — `0 9 * * 1-5` per esempio si legge "al minuto 0, ora 9, qualunque giorno del mese, qualunque mese, giorno della settimana da lunedì a venerdì" — in italiano, "giorni feriali alle 9:00".
Cron è nato in Unix Versione 7 nel 1979 e la grammatica a cinque campi è rimasta essenzialmente invariata per oltre quattro decenni — una testimonianza di quanto sia ben progettata la sintassi originale. Oggi le espressioni cron sono usate ben oltre il file crontab Unix: i CronJob di Kubernetes, i workflow di GitHub Actions, le regole di AWS EventBridge, le pipeline pianificate di GitLab CI, i Cron Triggers di Cloudflare Workers e le piattaforme serverless di ogni cloud accettano tutti la stessa grammatica a cinque campi. Imparare cron una volta significa sapere come pianificare job in ogni contesto infrastrutturale moderno.
Lo standard POSIX definisce cinque operatori: `*` (qualsiasi valore), `,` (lista di valori), `-` (intervallo), `/` (passo) e i token nominati per i mesi (JAN-DEC) e i giorni della settimana (SUN-SAT). La maggior parte delle implementazioni espande inoltre cinque scorciatoie comuni: `@yearly` (`0 0 1 1 *`), `@monthly` (`0 0 1 * *`), `@weekly` (`0 0 * * 0`), `@daily` (`0 0 * * *`) e `@hourly` (`0 * * * *`). Lo scheduler Quartz (una libreria Java) estende tutto questo con un campo secondi opzionale e operatori aggiuntivi (`?`, `L`, `W`, `#`) — utile se lavori in Java/Spring, ma non portabile al cron standard. Questo strumento segue lo standard POSIX a cinque campi perché è la variante dominante e quella che il tuo server Linux, il runner di GitHub Actions e il cluster Kubernetes capiranno davvero.
Una stranezza del cron POSIX merita attenzione speciale: quando sia il giorno del mese sia il giorno della settimana sono ristretti (nessuno dei due è `*`), la pianificazione viene eseguita se UNO O L'ALTRO corrisponde — semantica OR, non AND. Quindi `0 0 1 * 5` parte il primo di ogni mese E ogni venerdì, non solo i venerdì che cadono il primo. È la sorpresa più comune di cron; l'anteprima delle prossime esecuzioni in questo strumento la rende ovvia mostrando le date e le ore esatte in cui la pianificazione partirà. Verifica prima del deploy.
Tutto il parsing e il calcolo delle prossime esecuzioni avviene interamente nel tuo browser tramite JavaScript — nessuna espressione, pianificazione o altro dato viene mai inviato a un server. Questo strumento analizza qualunque espressione cron POSIX standard all'istante con una descrizione in italiano e un'anteprima di cinque esecuzioni, con privacy completa.
Le espressioni cron sono strettamente legate ad altri strumenti per sviluppatori. I cron job vengono comunemente debuggati confrontando gli Unix timestamp con gli orari di esecuzione attesi, e le pianificazioni complesse vengono spesso documentate come configurazioni JSON che puoi validare con il nostro formattatore JSON. Per una guida approfondita che copre la semantica OR, le insidie dei fusi orari e le varianti comuni di cron con esempi in Linux, Kubernetes e GitHub Actions, leggi il nostro riferimento sulle pianificazioni cron.
# Linux crontab entry — runs every 15 minutes
*/15 * * * * /usr/local/bin/poll-api.sh
# Kubernetes CronJob — weekdays at 9:00 AM UTC
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-report
spec:
schedule: "0 9 * * 1-5"
timeZone: "UTC"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: report-runner:1.0
restartPolicy: OnFailure
# GitHub Actions workflow — hourly
on:
schedule:
- cron: '0 * * * *'
# AWS EventBridge — first of each month
ScheduleExpression: cron(0 0 1 * ? *)
# (Note: AWS uses the Quartz 6-field form with '?' for day-of-week) Caratteristiche principali
Parser POSIX a 5 campi in tempo reale
Parser rigoroso che segue cron POSIX: minuto (0-59), ora (0-23), giorno del mese (1-31), mese (1-12 o JAN-DEC), giorno della settimana (0-6 o SUN-SAT, con 7 accettato come domenica). Tutti gli operatori standard (`*` `,` `-` `/`) e le macro (`@yearly` `@monthly` `@weekly` `@daily` `@hourly`) supportati.
Anteprima delle prossime 5 esecuzioni
Calcola gli orari delle prossime cinque esecuzioni a partire dalla tua ora locale corrente. Passa tra Locale e UTC con un clic — il modo più affidabile per cogliere sorprese di fuso orario prima di deployare un crontab su un server in un'altra regione.
Descrizione in linguaggio naturale
Ogni espressione valida riceve una spiegazione leggibile: "Ogni 15 minuti", "Giorni feriali alle 9:00", "Alle 02:30 del giorno 1 del mese, a gennaio e luglio". Rende code review e passaggi di consegne immediati — non dovrai più indovinare cosa faccia davvero `*/5 9-17 * * 1-5`.
Messaggi di errore a livello di campo
Le espressioni non valide ricevono un feedback rosso istantaneo con il campo problematico evidenziato e un errore specifico: "Errore in minuto: valore fuori intervallo [0, 59]: "60"". Niente più fallimenti silenziosi del crontab scoperti tre giorni dopo quando il report non è partito.
Chip preset per pianificazioni comuni
Undici preset a un clic coprono le pianificazioni che userai davvero: ogni minuto, ogni 5/15 minuti, ogni ora, ogni giorno a mezzanotte o alle 9, giorni feriali alle 9, settimanale di domenica/lunedì, primo di ogni mese e annuale. Tocca, ritocca, deploya.
Input per costruire campo per campo
Non memorizzare l'ordine dei cinque campi — cinque piccoli input etichettati Minuto, Ora, Giorno del mese, Mese, Giorno della settimana ti permettono di modificare una posizione alla volta senza perdere un valore o invertire l'ordine. L'espressione completa in alto si ricostruisce automaticamente.
Semantica OR POSIX gestita correttamente
Quando sia il giorno del mese sia il giorno della settimana sono ristretti, scatta la regola OR — `0 0 1 * 5` parte ogni 1° E ogni venerdì. L'anteprima delle prossime esecuzioni rende tutto questo visibile prima del deploy; niente più pagine a sorpresa nel weekend.
Privacy: 100% nel browser
Le tue espressioni cron — che spesso rivelano la temporizzazione dell'infrastruttura e i pattern di pianificazione interna — non lasciano mai il tuo browser. Nessun dato viene inviato ad alcun server, nessun log, nessun analytics. Puoi verificarlo nella scheda Network del tuo browser. Sicuro per pianificazioni di produzione e sistemi interni.
Messaggi di errore consapevoli di Quartz
Se incolli un'espressione Quartz con `?` `L` `W` o `#`, il parser spiega "Operatori Quartz non supportati — usa la sintassi POSIX" così sai di doverla riscrivere per cron invece di debuggare un fallimento silenzioso. Le pianificazioni Quartz non girano su cron Linux.
Varianti di cron e scheduler
Vixie cron (default Linux)
POSIX a 5 campiIl default sulla maggior parte delle distribuzioni Linux. POSIX rigoroso con l'estensione `CRON_TZ=` per il fuso orario esplicito. La semantica OR su giorno del mese / giorno della settimana si applica. Il target principale di questo strumento.
BSD cron
POSIX a 5 campiDefault su macOS e famiglia BSD. Compatibile POSIX con piccole differenze implementative rispetto a vixie cron; la maggior parte delle espressioni funziona in modo identico.
Timer systemd (OnCalendar)
specifica calendario, non cronAlternativa a cron su Linux basato su systemd. Usa la sintassi `OnCalendar: 2026-*-* 09:00:00` — più leggibile per pianificazioni non ricorrenti ma non interoperabile con le espressioni cron.
Quartz Scheduler (Java/Spring)
6 o 7 campiAggiunge i campi secondi (obbligatorio) e anno (opzionale), più gli operatori `?`, `L`, `W`, `#`. Utile per applicazioni Java ma non portabile al cron Linux.
AWS EventBridge
Quartz a 6 campi con `?`Richiede che il giorno della settimana o il giorno del mese sia `?` (convenzione Quartz) anziché `*` quando solo uno è ristretto. Le espressioni non sono portabili direttamente al cron Linux.
Kubernetes CronJob
POSIX a 5 campi + campo timeZonePianificazione POSIX a 5 campi più campo `spec.timeZone` (1.27+). Più pulito che affidarsi al fuso orario dell'host del kubelet. Le espressioni sono portabili direttamente dal cron Linux.
GitHub Actions
POSIX a 5 campiGira sempre in UTC. Tempistiche best-effort — possono essere saltate sotto carico elevato. Evita intervalli inferiori a 15 minuti. Le espressioni sono portabili direttamente dal cron Linux.
Esempi di espressioni cron
Ogni 15 minuti
*/15 * * * *
Operatore passo: `*/15` nel campo dei minuti significa "ogni 15 minuti a partire dal minuto 0" — quindi le esecuzioni avvengono a :00, :15, :30, :45 di ogni ora di ogni giorno. L'intervallo più comune per il polling di API, l'aggiornamento delle cache e i controlli di heartbeat.
Giorni feriali alle 9:00
0 9 * * 1-5
L'intervallo `1-5` nel campo del giorno della settimana indica da lunedì a venerdì (1=lun, 5=ven). Viene eseguito esattamente alle 09:00 — utile per report in orario lavorativo, job batch che dipendono da dati notturni e promemoria di standup giornalieri.
Primo del mese a mezzanotte
0 0 1 * *
Giorno del mese `1`, tutti gli altri campi inferiori a zero. Comune per fatturazione mensile, rotazione dei log e riconciliazione di fine periodo. Giorno del mese e giorno della settimana sono entrambi ristretti solo quando nessuno dei due è `*` — qui il giorno della settimana è `*`, quindi conta solo il giorno del mese.
Ogni 5 minuti tra le 9 e le 17, giorni feriali
*/5 9-17 * * 1-5
Combina il passo (`*/5`) con un intervallo (`9-17`) su campi diversi. Utile per monitoraggio limitato all'orario lavorativo o svuotamento di code. Totale: 12 esecuzioni/ora × 9 ore × 5 giorni = 540 esecuzioni a settimana lavorativa.
Trimestrale: il 1° di gen, apr, lug, ott a mezzanotte
0 0 1 JAN,APR,JUL,OCT *
Mesi nominati in una lista separata da virgole. Pianificazioni trimestrali come chiusura finanziaria, revisioni di code-freeze o audit di conformità. Puoi mescolare nomi e numeri (`1,APR,7,10` viene interpretato allo stesso modo), ma mantieni un unico stile per leggibilità.
Trabocchetto OR POSIX: 1° del mese O ogni venerdì
0 0 1 * 5
Quando SIA il giorno del mese (`1`) SIA il giorno della settimana (`5`) sono ristretti, cron POSIX esegue il job se UNO O L'ALTRO corrisponde. Quindi parte il 1° di ogni mese E ogni venerdì — non solo i venerdì che cadono il primo. È la sorpresa più comune di cron; l'anteprima delle prossime esecuzioni la rende ovvia.
Ogni giorno alle 02:30 (finestra a basso traffico)
30 2 * * *
Valori specifici sia per l'ora sia per il minuto, wildcard altrove. La finestra 02:00-04:00 UTC è la convenzione di fatto per i job batch notturni perché non si sovrappone all'orario lavorativo di nessuna grande area economica. Combina con il toggle UTC per confermare che l'esecuzione avvenga dove ti aspetti.
Equivalente macro: @daily
@daily
La scorciatoia `@daily` (anche `@midnight`) si espande in `0 0 * * *` — ogni giorno a mezzanotte. Altre macro: `@yearly` = `0 0 1 1 *`, `@monthly` = `0 0 1 * *`, `@weekly` = `0 0 * * 0`, `@hourly` = `0 * * * *`. Le macro sono concise, ma la forma a cinque campi è più portabile tra scheduler diversi (alcuni supportano le macro, altri no).
Come costruire un'espressione cron
- 1
Scrivi o incolla un'espressione cron
Inserisci un'espressione cron a cinque campi nel campo qui sopra (es. `*/15 * * * *`). Lo strumento analizza e valida mentre digiti — spunta verde se valida, errore rosso con il nome del campo se non valida. Sono accettate anche le macro come `@daily`, `@hourly`, ecc.
- 2
Oppure modifica i cinque campi
Non memorizzare l'ordine dei campi — modifica Minuto, Ora, Giorno del mese, Mese o Giorno della settimana singolarmente tramite gli input etichettati. L'espressione completa in alto si aggiorna automaticamente. Usa `*` per le wildcard, `*/N` per i passi, `a-b` per gli intervalli e `1,3,5` per le liste.
- 3
Scegli un preset per partire
Tocca un qualunque chip preset (Ogni 15 minuti, Giorni feriali alle 9, ecc.) per caricare una pianificazione comune, poi adatta i campi alle tue esigenze. Undici preset coprono i pattern che userai davvero in produzione.
- 4
Verifica l'anteprima delle prossime esecuzioni
Guarda le cinque date e ore di esecuzione imminenti — passa tra Locale e UTC per confermare che la pianificazione parta quando intendi. È il modo più affidabile per cogliere il trabocchetto OR POSIX del giorno del mese/giorno della settimana prima che ti morda in produzione.
- 5
Copia e incolla nel tuo scheduler
Clicca su Copia per prendere l'espressione. Incolla nel tuo crontab, in un timer systemd, nel `cron:` di GitHub Actions, in AWS EventBridge, nello `schedule` di un Kubernetes CronJob o in qualunque scheduler compatibile con cron. Non dimenticare di verificare il fuso orario dello scheduler target — vedi la sezione Best practice qui sotto.
Errori comuni di cron
Trabocchetto OR POSIX: entrambi i campi giorno ristretti
Quando SIA il giorno del mese SIA il giorno della settimana sono ristretti, cron POSIX esegue il job se UNO O L'ALTRO corrisponde — non entrambi. Quindi `0 0 1 * 5` parte il primo di ogni mese E ogni venerdì, non solo i venerdì-che-cadono-il-1°. Usa `*` in uno dei due campi giorno quando vuoi una sola condizione, oppure scrivi uno script wrapper che fa il controllo AND.
# Intenzione: "primo venerdì del mese" 0 0 1-7 * 5 # In realtà: parte nei giorni 1-7 del mese O ogni venerdì — entrambe le condizioni
# Usa un wrapper per vera semantica AND 0 0 * * 5 [ $(date +\%d) -le 7 ] && /tuo-script # OPPURE elimina una condizione e accetta la pianificazione più ampia
Deriva di fuso orario tra dev e produzione
Le pianificazioni cron su un server Linux usano il fuso orario di sistema, non quello locale di chi le scrive. Un cron alle 9:00 su un server impostato su UTC parte alle 4 del mattino US East. Progetta sempre le pianificazioni rispetto al fuso orario del server target — preferibilmente UTC — e fissa il fuso orario esplicitamente con `CRON_TZ=...` in cima al crontab.
# Scritto da uno sviluppatore US East, deployato su server UTC 0 9 * * * /tuo-report.sh # Parte alle 9 UTC = 4 del mattino US East — non quello che intendeva lo sviluppatore
# Fissa il fuso orario, oppure scrivi in UTC esplicitamente CRON_TZ=America/New_York 0 9 * * * /tuo-report.sh
Confusione sull'operatore passo: '*/15' vs '15'
`*/15` nel minuto significa "ogni 15 minuti a partire da 0" (quindi 0, 15, 30, 45). Solo `15` significa "solo al minuto 15" — un'esecuzione all'ora. I principianti spesso scrivono `15` pensando che sia ogni 15 minuti; la descrizione in linguaggio naturale dello strumento rende l'errore ovvio prima del deploy.
# Intenzione: ogni 15 minuti 15 * * * * # In realtà: una volta all'ora, al minuto 15 (4 esecuzioni/ora in meno dell'intenzione)
# Corretto */15 * * * * # Ogni 15 minuti: minuto 0, 15, 30, 45 di ogni ora
Espressione a sei campi su scheduler POSIX
Quartz/Spring/node-cron supportano un campo secondi opzionale come prima posizione. Crontab Linux, GitHub Actions, AWS EventBridge (perlopiù) e Kubernetes CronJob NON lo supportano — si aspettano cinque campi. Incollare un'espressione a sei campi rompe silenziosamente la pianificazione: i tuoi secondi diventano minuti, i minuti diventano ore, ecc.
# Quartz a 6 campi copiato in crontab Linux 0 0 9 * * 1-5 # Linux legge: minuto=0, ora=0, dom=9, mese=*, dow=1-5 # = mezzanotte nei giorni 9 nei mesi che corrispondono ai giorni feriali — caos
# POSIX a 5 campi, elimina i secondi 0 9 * * 1-5 # = giorni feriali alle 9:00
Giorno del mese fuori intervallo per il mese
Cron non valida il giorno del mese rispetto al mese effettivo. `0 0 31 2 *` (31 febbraio) viene interpretato senza errori ma non corrisponde mai — febbraio ha al massimo 29 giorni. I principianti danno per scontato che il parser intercetti questo; non lo fa. L'anteprima delle prossime esecuzioni in questo strumento mostra "Nessuna esecuzione" quando un'espressione è strutturalmente valida ma logicamente impossibile.
# 30 o 31 febbraio — non parte mai 0 0 30 2 * 0 0 31 2 * # Si interpreta ma nessuna pianificazione parte mai
# Usa il pattern 'ultimo giorno feriale di febbraio' tramite script 0 0 28-29 2 * [ $(date -d tomorrow +\%m) = 03 ] && /tuo-script
Confondere la sintassi Quartz con POSIX
La documentazione AWS, i tutorial di Spring e molte risposte di Stack Overflow mostrano espressioni cron Quartz con `?`, `L`, `W` o `#`. Queste non funzionano nel crontab Linux. Se copi un'espressione a sei campi con `?` nello slot del giorno della settimana, il parser Linux la rifiuta (o peggio, la interpreta silenziosamente in modo sbagliato). Questo strumento intercetta gli operatori Quartz e spiega la differenza.
# Quartz: 'ultimo venerdì del mese' — non valido in POSIX 0 0 ? * 6L *
# Approccio POSIX con script wrapper per ultimo-venerdì 0 0 25-31 * 5 /tuo-script # Parte di venerdì tra il 25 e il 31 di qualunque mese
Casi d'uso comuni
- Job di crontab Linux
- Costruisci e verifica le voci per `/etc/crontab`, `/etc/cron.d/*` o i file `crontab -e` per utente. Usa l'anteprima delle prossime esecuzioni per confermare che la pianificazione cada all'orario giusto nel fuso orario configurato del tuo server prima di salvare.
- Pianificazioni di Kubernetes CronJob
- Genera il campo `spec.schedule` per un CronJob Kubernetes. Kubernetes 1.27+ supporta anche `spec.timeZone` — usa il toggle UTC per progettare la pianificazione in UTC, poi imposta esplicitamente `timeZone` per evitare l'ora locale del worker node.
- Workflow pianificati di GitHub Actions
- Costruisci la voce `cron:` sotto `on.schedule`. GitHub Actions gira sempre in UTC — passa l'anteprima a UTC per confermare la pianificazione. Evita intervalli inferiori a 15 minuti; lo scheduler di GitHub salta i job a intervalli brevi sotto carico.
- Regole di AWS EventBridge
- Componi l'espressione cron per una regola pianificata di EventBridge. Nota: AWS usa la sintassi Quartz a sei campi con `?` per il giorno della settimana — questo strumento emette POSIX a cinque campi, che dovrai convertire anteponendo i secondi (`0`) e sostituendo il `*` in uno dei due campi giorno con `?`.
- Pipeline pianificate di GitLab CI
- Verifica l'espressione cron per una pipeline CI pianificata in GitLab. GitLab usa la sintassi POSIX a cinque campi — quella che emette questo strumento — e un date picker nell'interfaccia, ma la forma cron ti dà controllo più fine per intervalli non standard.
- Cron Triggers di Cloudflare Workers
- Costruisci la voce `[triggers.crons]` in `wrangler.toml`. Cloudflare usa la sintassi POSIX a cinque campi. L'intervallo minimo è di un minuto; il worker gira in UTC. Usa l'anteprima per verificare che il trigger parta entro la finestra prevista.
- Pianificazioni node-cron in Node.js
- Costruisci espressioni per la libreria `node-cron`, che supporta sia POSIX a cinque campi sia un campo secondi iniziale opzionale. Resta sui cinque campi a meno che ti serva precisione sub-minuto — le espressioni a sei campi non sono portabili al crontab Linux.
- Code review e documentazione
- Incolla un'espressione cron da una PR o da un runbook per vedere subito cosa fa — niente più indovinelli su `30 7 * * 1-5` o consultazioni di schede di riferimento. La descrizione in linguaggio naturale è ottima anche per commenti inline e file README.
Riferimento sintassi cron
- Ordine dei campi: M H D M W
- Minuto (0-59), Ora (0-23), Giorno del mese (1-31), Mese (1-12), Giorno della settimana (0-6, 7 = anche domenica). Il campo del giorno della settimana accetta sia token numerici (0-6) sia nominati (SUN-SAT, non sensibili al maiuscolo/minuscolo).
- Operatori
- `*` = qualsiasi valore; `,` = separatore di lista (`1,3,5`); `-` = intervallo (`1-5`); `/` = passo (`*/15`, `5/10`); nomi: JAN-DEC per il mese, SUN-SAT per il giorno della settimana (non sensibili al maiuscolo/minuscolo).
- Macro (alias)
- `@yearly` = `0 0 1 1 *`; `@annually` = `0 0 1 1 *`; `@monthly` = `0 0 1 * *`; `@weekly` = `0 0 * * 0`; `@daily` = `0 0 * * *`; `@midnight` = `0 0 * * *`; `@hourly` = `0 * * * *`. `@reboot` è una non-pianificazione speciale (parte solo al boot) e viene rifiutata con un errore esplicativo.
- Semantica dei giorni POSIX (regola OR)
- Quando SIA il giorno del mese SIA il giorno della settimana sono ristretti (nessuno dei due è `*`), la pianificazione viene eseguita se UNO O L'ALTRO corrisponde — semantica OR. Quando solo uno è ristretto, decide quello. Quando entrambi sono `*`, ogni giorno corrisponde. Questa regola OR si applica a vixie cron, BSD cron e alla maggior parte delle implementazioni POSIX; Quartz usa `?` per disambiguare AND vs OR.
- Modalità a sei campi (Quartz-lite)
- Se il tuo input ha sei token separati da spazi, lo strumento tratta il primo come campo secondi (0-59). Utile per Quartz, Spring `@Scheduled(cron=...)` e node-cron. NON portabile al crontab Linux o agli scheduler POSIX — tratterebbero i tuoi secondi come minuti e sposterebbero tutto di una posizione.
- Ancoraggio dell'operatore passo
- `*/N` è ancorato al valore più basso del campo: `*/15` nel minuto = `0,15,30,45`, non "ogni 15 a partire da ora". Con una base non-wildcard: `5/15` nel minuto = `5,20,35,50`. I valori di passo che non dividono uniformemente l'intervallo del campo salteranno vicino al wraparound — è corretto, non un bug.
- Limiti di validazione
- minuto ∈ [0,59], ora ∈ [0,23], giorno del mese ∈ [1,31], mese ∈ [1,12], giorno della settimana ∈ [0,7]. I valori fuori intervallo producono un errore a livello di campo. Il giorno del mese NON viene validato rispetto al mese (`0 0 31 2 *` viene interpretato senza errori ma non corrisponde mai perché febbraio non ha il giorno 31 — l'anteprima delle prossime esecuzioni mostrerà "Nessuna esecuzione").
- Operatori Quartz rifiutati
- Cron POSIX non supporta gli operatori Quartz `?` (nessun valore specifico), `L` (last), `W` (giorno feriale più vicino) o `#` (n-esimo giorno della settimana). Questo strumento li rifiuta con un chiaro messaggio "Operatori Quartz non supportati" invece di analizzarli silenziosamente come POSIX non valido. Per pianificazioni Quartz, usa uno strumento consapevole di Quartz o lo scheduler di Spring.
- Limite annuale sulla ricerca delle prossime esecuzioni
- Il calcolo delle prossime esecuzioni cerca fino a 4 anni in avanti; le espressioni che corrispondono meno spesso (es. pattern "29 febbraio") mostreranno "Nessuna esecuzione nei prossimi 4 anni". È una scelta progettuale per evitare iterazioni illimitate su pattern impossibili.
Best practice per le pianificazioni cron
- Usa UTC sui server, converti al momento della visualizzazione
- Imposta i tuoi server su UTC (`/etc/timezone` o `TZ=UTC`) e scrivi tutte le espressioni cron in UTC. Converti in ora locale solo al momento della visualizzazione nelle dashboard e nei report. Questo elimina un'intera categoria di bug di fuso orario che colpiscono più duramente durante le transizioni dell'ora legale, quando le pianificazioni in ora locale partono silenziosamente due volte o saltano un'esecuzione. Usa il toggle UTC in questo strumento per progettare la pianificazione in UTC fin dall'inizio.
- Evita il trabocchetto OR POSIX di giorno del mese/giorno della settimana
- Non restringere mai sia il giorno del mese SIA il giorno della settimana se non vuoi la semantica OR. Se vuoi "ogni lunedì di gennaio", scrivi `0 0 * 1 1` (il giorno del mese è `*`); se vuoi "il primo di ogni mese", scrivi `0 0 1 * *` (il giorno della settimana è `*`). La regola OR POSIX fa sì che `0 0 1 * 1` parta il 1° E ogni lunedì — quasi sicuramente non quello che intendevi. L'anteprima delle prossime esecuzioni cattura questo se controlli prima del deploy.
- Fissa esplicitamente il fuso orario della pianificazione
- Gli scheduler moderni supportano il pinning del fuso orario nella definizione della pianificazione: `CRON_TZ=America/New_York` in cima a un crontab (vixie cron 3.0+), `spec.timeZone: "America/New_York"` per Kubernetes CronJobs 1.27+, espressione di pianificazione con `ScheduleExpressionTimezone` per AWS EventBridge Scheduler. Fissa il fuso orario esplicitamente invece di affidarti al default del server — i fusi orari dei server possono cambiare senza preavviso durante migrazioni infrastrutturali.
- Distribuisci il carico tra i minuti, non a :00
- Evita `0 * * * *` (ogni ora al minuto 0) per i job non critici — a scala, pianificare molte cose esattamente a :00 crea picchi di carico. Scegli un offset casuale di minuti (`23 * * * *`, `41 * * * *`) per ogni job per distribuire il carico. Lo stesso vale per i job giornalieri: `30 3 * * *` è più gentile col tuo database di `0 3 * * *` quando molti job convergono alle 3:00.
- Rendi i job idempotenti
- Cron non ha retry integrato, prevenzione di sovrapposizioni o recupero di esecuzioni perse. Il tuo job dovrebbe poter essere eseguito più volte in sicurezza (idempotente) e auto-controllarsi. Invece di "invia report alle 9", progettalo come "invia il report di oggi se non già inviato" — così si auto-ripara dopo downtime, doppie pianificazioni accidentali ed esecuzioni concorrenti. L'idempotenza è una proprietà del job, non dello scheduler, ed è la singola pratica di affidabilità più importante.
- Aggiungi un heartbeat per le pianificazioni critiche
- Il fallimento silenzioso è la debolezza più grande di cron — se la pianificazione non parte, niente te lo dice. Per i job critici, fai sì che il job invii un ping a un servizio di heartbeat (Healthchecks.io, Cronitor, Dead Man's Snitch) alla fine di ogni esecuzione; il servizio ti avvisa se il ping atteso non arriva. Questo cattura sia il job che fallisce sia la pianificazione stessa che parte male. Il piano gratuito copre la maggior parte delle esigenze personali e di piccoli team.
- Verifica con l'anteprima delle prossime esecuzioni prima di rilasciare
- Prima di deployare una nuova pianificazione cron, guarda le cinque date e ore di esecuzione imminenti nell'anteprima di questo strumento. Passa tra Locale e UTC. Conferma che la pianificazione cada quando intendi — non cinque minuti prima, non nel giorno sbagliato, non saltando il weekend che ti interessava. L'anteprima è il test di produzione meno costoso possibile.
Domande frequenti
Cosa fa questo strumento?
Cos'è un'espressione cron?
I miei dati vengono caricati da qualche parte?
Qual è la differenza tra cron POSIX e Quartz?
Perché '0 0 1 * 5' viene eseguito ogni venerdì E il primo del mese?
Come faccio a eseguire un job ogni 30 secondi?
Che fuso orario usa cron?
In cosa si espande davvero '*/15'?
Posso usare un'espressione a sei campi con i secondi?
Qual è l'intervallo massimo esprimibile in cron?
Come gestisco le esecuzioni saltate dopo un downtime?
Perché il mio cron di GitHub Actions non parte in orario?
Strumenti correlati
Vedi tutti gli strumenti →Convertitore Timestamp Unix ed Epoch — Multi-Precisione
Data e ora
Converti timestamp Unix in date all'istante. Rileva automaticamente secondi, millisecondi e microsecondi. Orologio live, bidirezionale. Gratis e privato online.
Convertitore di Basi Numeriche — Bin, Hex, Ott, Dec
Strumenti di conversione
Converti istantaneamente tra binario, esadecimale, decimale, ottale e qualsiasi base (2-36). Strumento online gratuito e privato: tutta l'elaborazione avviene nel tuo browser.
Decodificatore e codificatore Base64
Codifica e formattazione
Decodifica e codifica Base64 online gratis. Conversione in tempo reale con pieno supporto UTF-8 ed emoji. 100% privato — gira nel tuo browser. Nessuna registrazione.
Convertitore CSV in JSON
Codifica e formattazione
Converti CSV in JSON nel browser. RFC 4180, inferenza tipi, riga header, sicuro per big-int. 100% privato, nessun upload.
Comprimi Immagini Online — JPEG, PNG e WebP
Strumenti di conversione
Comprimi JPEG, PNG e WebP fino all'80% in meno — nel tuo browser, senza upload. Batch di 20 immagini, regola la qualità, confronta prima e dopo. Gratuito e privato.
JSON Diff (Confronta)
Codifica e formattazione
Confronta due file JSON istantaneamente nel browser. Evidenziazione affiancata, output JSON Patch RFC 6902, ignora campi rumorosi come timestamp e ID. 100% privato, nessun upload.