Calcolare le prossime esecuzioni di un'espressione cron
- Dashboard
- Documentazione
- API
Cos'è un'espressione cron?
Un'espressione cron è una stringa breve che descrive una ricorrenza nel tempo. Il
formato ereditato da Unix sta in cinque campi separati da spazi: minuto, ora,
giorno del mese, mese e giorno della settimana. Questa sintassi è nata con il demone
cron di Brian Kernighan negli anni '70, poi generalizzata dal Vixie cron
(1987) ripreso da tutte le distribuzioni Linux e macOS moderne. Oggi, la stessa sintassi si
ritrova nella maggior parte degli scheduler cloud (AWS EventBridge, GCP Cloud Scheduler, Azure Logic
Apps) e CI/CD (GitHub Actions, GitLab CI, Jenkins).
┌──── minute (0-59)
│ ┌── heure (0-23)
│ │ ┌── jour du mois (1-31)
│ │ │ ┌── mois (1-12 ou JAN-DEC)
│ │ │ │ ┌── jour de la semaine (0-7 ou SUN-SAT, 0 et 7 = dimanche)
│ │ │ │ │
* * * * *
Un'espressione cron ben formata definisce quindi un cron schedule preciso: ogni campo può essere un valore fisso, un intervallo, una lista, un passo o un asterisco che fa match con tutto. La compattezza della crontab expression è la sua forza, ma è anche ciò che rende un cron decoder indispensabile per validare visivamente l'intenzione. È tutto l'oggetto di questo cron converter: produrre una spiegazione cron leggibile, più la lista delle prossime esecuzioni.
Anatomia di un'espressione cron
I cinque campi condividono una grammatica comune. Ecco i limiti accettati da ogni colonna di un' espressione crontab standard:
- Minuto:
0-59. - Ora:
0-23, formato 24h. - Giorno del mese:
1-31. - Mese:
1-12o le abbreviazioni testualiJAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC. - Giorno della settimana:
0-7dove0e7rappresentano entrambi domenica, o le abbreviazioniSUN,MON,TUE,WED,THU,FRI,SAT.
Caratteri speciali condivisi dai cinque campi:
*: any value, fa match con tutti i valori autorizzati del campo.,: lista discreta, per esempio1,15,30nel campo minuto.-: intervallo inclusivo, per esempio9-17per le ore d'ufficio./: passo (step), per esempio*/15= ogni 15 unità, o0-30/5= ogni 5 minuti tra 0 e 30.
Estensioni Quartz (Java, AWS EventBridge, Spring): la grammatica sale a 6 o 7
campi con una colonna secondi in testa (0-59) e talvolta una colonna
anno in coda (1970-2099). Quartz introduce anche ? (no specific
value, per disaccoppiare giorno-del-mese e giorno-della-settimana), L (last: ultimo giorno del mese,
o ultimo venerdì con 5L), W (giorno feriale più vicino) e #
(N-esimo giorno della settimana del mese, per esempio 2#3 per il 3° lunedì). Un'espressione
Quartz non è generalmente compatibile con una crontab UNIX, e viceversa: è la principale
fonte di errore quando si copia una cron expression da una piattaforma all'altra.
# UNIX / Vixie cron (5 champs)
0 9 * * 1-5
# Quartz (6 champs avec secondes)
0 0 9 ? * MON-FRI
# Quartz (7 champs avec année)
0 0 9 ? * MON-FRI 2026
Perché decodificare un'espressione cron?
Leggere 0 0 * * * è rapido. Leggere */7 2-5 1,15 * 1-5 lo è nettamente meno. Quando
un'espressione esce dal banale, il rischio di errore di interpretazione sale e la cron decode
diventa una tappa di review a parte.
- Debug produzione: capire perché un'attività si è attivata alle 03:17 e non alle 03:00, o identificare una sovrapposizione tra due job.
- Code review: validare che uno scheduler proposto in pull request faccia ciò che l'autore pretende, senza dover memorizzare la semantica di ogni simbolo.
- Audit di scheduler: passare in rassegna i cron job Linux in
/etc/crontabe/etc/cron.d/, i trigger Jenkins, glispec.scheduledi Kubernetes CronJob, le regole AWS EventBridge e i job GCP Cloud Scheduler. - Migrazione legacy: riprendere una
/etc/crontabstorica senza documentazione e ricostruire la mappatura delle attività prima di un cambio di infrastruttura. - Onboarding: permettere a un nuovo sviluppatore di rileggere una crontab senza dover imparare tutti i caratteri speciali da un giorno all'altro.
Come usare il cron decoder
La procedura per decodificare un'espressione crontab con lo strumento:
- Incollate la vostra cron expression nel campo di input (5 campi separati da spazi).
- Indicate il numero di prossime esecuzioni da calcolare.
- Cliccate su convert per lanciare la cron decode: lo strumento restituisce una frase umana che spiega l'attivazione, più la lista datata delle prossime esecuzioni.
- Verificate visivamente che le date corrispondano alla vostra intenzione (ora, giorno, frequenza).
- Copiate l'output tramite il pulsante di copia per incollarlo in un ticket, una PR o una documentazione tecnica.
Lo strumento non si limita a un parsing sintattico: fornisce una spiegazione cron in linguaggio naturale, il che ne fa al tempo stesso un cron decoder e un validatore di pianificazione.
Esempi classici di cron expression
I pattern qui sotto coprono l'essenziale dei cron schedule incontrati in produzione. Sono tutti validi su Linux crontab, Kubernetes CronJob, GitHub Actions e la maggior parte degli scheduler applicativi.
| Espressione | Lettura umana |
|---|---|
* * * * * |
Ogni minuto |
0 * * * * |
Ogni ora in punto |
0 0 * * * |
Tutti i giorni a mezzanotte |
0 0 * * 0 |
Tutte le domeniche a mezzanotte |
*/15 * * * * |
Ogni 15 minuti |
0 9 * * 1-5 |
9:00 dal lunedì al venerdì |
0 0 1 * * |
Il 1° di ogni mese a mezzanotte |
0 0,12 * * * |
A mezzanotte e mezzogiorno tutti i giorni |
*/5 9-17 * * 1-5 |
Ogni 5 minuti in orario d'ufficio |
30 2 1,15 * * |
Il 1° e il 15 del mese alle 2:30 |
Per eseguire un'attività cron su un server Linux, si modifica la crontab utente dalla shell:
# éditer la crontab de l'utilisateur courant
$ crontab -e
# lister les tâches existantes
$ crontab -l
# exemple de ligne ajoutée : sauvegarde quotidienne à 3h
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Esempio di output del cron converter per */5 * * * *:
2026-05-05 00:00:00
2026-05-05 00:05:00
2026-05-05 00:10:00
2026-05-05 00:15:00
2026-05-05 00:20:00
...
Domande frequenti sul cron decoder
Qual è la differenza tra cron UNIX e Quartz?
UNIX/Vixie cron usa 5 campi (minuto a giorno-della-settimana), senza precisione al secondo, e non ha
nozione nativa di «ultimo giorno del mese». Quartz (Java, Spring, AWS EventBridge) aggiunge una colonna
secondi in testa, talvolta una colonna anno in coda, e più simboli
(?, L, W, #) assenti dalla crontab Linux. Un'
espressione cron Quartz a 6 campi non è quindi direttamente portabile verso
/etc/crontab, e viceversa. Il nostro cron decoder mira al formato a 5
campi, che copre la maggior parte degli scheduler.
Come eseguire un'attività cron ogni 5 minuti?
Con il passo / sul campo minuto:
*/5 * * * * /usr/local/bin/check-health.sh
Questa crontab expression attiva lo script ai minuti 0, 5, 10, 15... di ogni
ora, tutti i giorni. Per limitare alle ore d'ufficio dal lunedì al venerdì, aggiungete i vincoli
sui campi ora e giorno-della-settimana: */5 9-17 * * 1-5.
Cosa significa l'asterisco (*) in un'espressione cron?
L'asterisco significa any value: fa match con tutti i valori autorizzati del campo. In
0 0 * * *, i tre asterischi significano «qualsiasi giorno del mese, qualsiasi
mese, qualsiasi giorno della settimana». Combinato ai primi due campi fissati a 0, si
ottiene «tutti i giorni a mezzanotte». L'asterisco può anche combinarsi con un passo: */15 in
minuto = ogni 15 minuti.
Crontab ha un fuso orario?
Per default, il fuso del server. Su una crontab Linux, è la TZ di sistema (spesso UTC sui VPS e
sui container). GitHub Actions forza UTC. Kubernetes CronJob usa il fuso del controller,
configurabile tramite spec.timeZone dalla 1.27. AWS EventBridge valuta le espressioni in
UTC. Gli scheduler applicativi (Symfony Scheduler, Quartz, Airflow) permettono spesso di fissare un
fuso dedicato per ogni attività. In caso di dubbio, verificate date sul server target e
confrontate con l'output del cron converter.
Cron job vs comando at: quale scegliere?
cron serve a eseguire un'attività ricorrente secondo una pianificazione. at serve
a eseguire un comando una sola volta a un istante dato. Per un backup giornaliero,
una rotazione di log o una chiamata API regolare, usate cron. Per differire un'operazione unica
(«rilancia questo deploy alle 22 stasera»), usate at:
$ echo "/usr/local/bin/deploy.sh" | at 22:00
Come testare un'espressione cron senza attivarla?
È precisamente il ruolo di questo cron converter: calcola le N prossime
esecuzioni a partire dall'istante corrente, senza avviare alcun job. Vedete immediatamente se la vostra
crontab expression scatti alle 03:00 come previsto o alle 03:17 per sbaglio. Per andare oltre
prima di installare l'attività, potete anche testare lo script da solo (bash -x script.sh)
e verificare la sintassi di un file crontab con crontab -T file sulle distribuzioni
che lo supportano.
Cosa succede se giorno-del-mese e giorno-della-settimana sono entrambi fissati?
Su Vixie cron (Linux), la regola è un OR logico: il job scatta se uno o
l'altro dei due campi fa match. È contro-intuitivo e fonte di bug. Quartz usa un
AND, da cui l'introduzione del simbolo ? per segnalare esplicitamente «nessun
vincolo». In generale, fissate solo uno dei due campi.
Esempio di richiesta
curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
-H "Content-Type: application/json" \
-d '{"cron":"...","number_next_date":1}'
Schema di input
| Campo | Tipo | Richiesto | Predefinito |
|---|---|---|---|
cron |
string | ✓ | – |
number_next_date |
integer | ✓ | – |
Endpoint
GET https://cdrn.fr/api/v1/tools- elenca tutti gli strumenti disponibiliGET https://cdrn.fr/api/v1/tools/cron-converter- recupera lo schema di questo strumentoPOST https://cdrn.fr/api/v1/tools/cron-converter/execute- esegue questo strumento con un payload JSON