Generatore di espressioni Cron

Costruisci e comprendi le pianificazioni di job cron in modo visivo.

Preimpostazioni rapide

* * * * *

Prossime 5 esecuzioni

Riferimento di sintassi cron

* · qualsiasi valore

*/5 · ogni 5 unità

1,15 · ai valori 1 e 15

1-5 · intervallo da 1 a 5

Campi: minuto (0-59), ora (0-23), giorno del mese (1-31), mese (1-12), giorno della settimana (0-6, 0=domenica)

Una breve storia dell'espressione cron

L'espressione cron a cinque campi risale a maggio 1975, quando una versione iniziale fu rilasciata dagli AT&T Bell Laboratories come parte di Research Unix Versione 7. Il nome accenna a Chronos, la personificazione greca del tempo. Il formato era semplice: cinque campi separati da spazi (minuto, ora, giorno-del-mese, mese, giorno-della-settimana) su una riga in /usr/lib/crontab. La riscrittura Vixie cron di Paul Vixie nel 1987 è diventata l'implementazione moderna di fatto; ogni grande distribuzione Linux include un cron derivato da Vixie, e Vixie ha aggiunto il crontab per utente, il supporto per le variabili d'ambiente (MAILTO=, CRON_TZ=) e le macro abbreviate @hourly / @daily / @reboot che tutti usano oggi. La sintassi dell'espressione cron si è poi divisa in due percorsi. Il Quartz Scheduler (Java, James House, 1998; donato ad Apache e Terracotta) ha aggiunto un campo secondi iniziale, un opzionale campo anno finale, e gli operatori L (ultimo) / W (giorno feriale) / # (n-esima occorrenza), producendo il cron a sei campi che AWS EventBridge (originariamente CloudWatch Events, 2014) e l'annotazione @Scheduled di Spring hanno poi adottato. Il formato NCronTab usato da Azure Functions (2016) ha messo i secondi per primi ma ha mantenuto cinque campi comportamentali. L'era cloud ha poi standardizzato il formato Vixie a cinque campi come lingua franca: Kubernetes CronJobs (alpha 1.4 nel 2016, GA in 1.21 nel 2021) accettano esattamente cinque campi, così come GitHub Actions (on.schedule.cron, 2019), GCP Cloud Scheduler (2018), e Vercel Cron Jobs (2022). I costruttori visivi di cron, la categoria a cui appartiene questo strumento, sono emersi intorno al 2010-2015: crontab.guru (Christine Dodrill, 2014) è diventato il riferimento più citato, e la libreria cron-descriptor (Brady Holt, originariamente .NET, portata in Java/Python/JS) ha alimentato la maggior parte degli strati di traduzione «cron in inglese semplice» su cui si basano decoder e generatori. Mezzo secolo dopo Bell Labs, gli stessi cinque campi stanno ancora pianificando i backup notturni del mondo.

L'anatomia di un'espressione cron

Dove si inserisce l'espressione

Standard, dialetti e pietre miliari

Altre domande frequenti

Cinque campi sono uguali a sei o sette?

No. La forma POSIX classica è di cinque campi (minuto, ora, giorno-del-mese, mese, giorno-della-settimana). Quartz e Spring usano sei campi aggiungendo una colonna secondi iniziale, e Quartz accetta un settimo campo anno opzionale. AWS EventBridge usa sempre sei campi che terminano con anno (cron(min hr dom mon dow yr)). Incollare un'espressione a cinque campi in Quartz o Spring solleva un errore di sintassi; incollare un'espressione a sei campi in Linux interpreta silenziosamente i campi in modo errato.

Qual è l'intervallo più piccolo che cron può esprimere?

Ogni minuto (* * * * *) sul cron Unix standard. Non esiste un campo secondi integrato. Scheduler come Quartz o NCronTab ne aggiungono uno se vi serve una cadenza sub-minuto, e i timer systemd possono usare OnUnitActiveSec=30s. GitHub Actions limita la cadenza più breve a 5 minuti, ed EventBridge scatta entro una finestra di 60 secondi dell'ora pianificata, quindi non fate affidamento su cron per precisione in tempo reale rigorosa.

Come eseguo un lavoro l'ultimo giorno del mese?

Il cron standard a cinque campi non ha un operatore nativo «ultimo giorno del mese». Quartz e AWS EventBridge supportano L nel campo giorno-del-mese: 0 0 L * ? scatta a mezzanotte l'ultimo giorno. Su cron Linux puro la soluzione abituale è pianificare giornalmente sui giorni candidati e filtrare il comando: 0 0 28-31 * * [ "$(date +\%d -d tomorrow)" = "01" ] && /path/to/script. I timer systemd lo esprimono direttamente con OnCalendar=*-*-* 00:00:00.

Perché il mio lavoro cron non è stato eseguito quando previsto?

I soliti sospetti, in ordine: (1) il server è in un fuso orario diverso da quello che assumete (verificate con date); (2) PATH non è quello della vostra shell interattiva, quindi un comando funziona al prompt ma fallisce sotto cron (usate percorsi assoluti); (3) l'output è andato in email e l'avete perso (impostate MAILTO="" o reindirizzate a un file di log); (4) il demone cron non è in esecuzione (systemctl status cron); (5) la trappola OR (vedi sopra) sta scattando su giorni extra che non intendevate.

Qual è la differenza tra cron, anacron e timer systemd?

Cron si aspetta che il sistema sia in esecuzione all'ora pianificata e salta silenziosamente i lavori che cadono durante i tempi di inattività: bene per server sempre accesi, male per laptop. Anacron traccia i timestamp di ultima esecuzione per lavoro e recupera i lavori persi dopo un riavvio, al costo di precisione a livello di giorno invece che di minuto. I timer systemd sostituiscono cron sulla maggior parte delle distribuzioni Linux moderne: supportano sia pianificazioni calendarie sia monotone, registrano in journald, possono dichiarare dipendenze di servizio, e usano Persistent=true per combinare precisione tipo cron con recupero tipo anacron.

Come fusi orari e ora legale influiscono su cron?

La maggior parte dei demoni cron interpreta le pianificazioni nel fuso orario del sistema. Sui server cloud questo di solito significa UTC, quindi 0 9 * * * scatta alle 9 UTC, non alle 9 locali. Impostate CRON_TZ=America/New_York in un crontab Linux; Kubernetes usa spec.timeZone; AWS, GCP e Vercel ciascuno accettano una zona IANA esplicita. Durante il passaggio all'ora legale, i lavori pianificati nell'ora saltata vengono eseguiti immediatamente dopo da Vixie cron ma saltati interamente da AWS EventBridge. Il pattern più sicuro è lasciare cron in UTC e convertire all'interno del lavoro.

Strumenti correlati