Cos'è un'Espressione Cron?
Cron è uno scheduler di job basato sul tempo integrato nei sistemi Unix/Linux. Un'espressione cron è la sintassi che dice a cron quando eseguire un'attività.
Le hai viste: 0 0 * * *. Significa "a mezzanotte, ogni giorno". Ma una volta che si va oltre le basi, la sintassi cron diventa rapidamente complicata — ci sono 5 campi, secondi opzionali, differenze tra piattaforme e caratteri speciali che la maggior parte delle persone copia e incolla senza capire.
Questa guida lo rende comprensibile.
I 5 (o 6) Campi
Il cron standard usa 5 campi separati da spazi:
┌──────────── minuto (0–59)
│ ┌────────── ora (0–23)
│ │ ┌──────── giorno del mese (1–31)
│ │ │ ┌────── mese (1–12)
│ │ │ │ ┌──── giorno della settimana (0–7, 0 e 7 sono domenica)
│ │ │ │ │
* * * * *
Alcuni sistemi (AWS EventBridge, Spring, Quartz) aggiungono un campo secondi all'inizio, portando a 6 campi. Controlla la tua piattaforma.
Caratteri Speciali
| Carattere | Significato | Esempio |
|---|---|---|
* | Ogni valore | * * * * * = ogni minuto |
, | Valori multipli | 0 9,17 * * * = alle 9 e alle 17 |
- | Intervallo | 0 9-17 * * * = ogni ora dalle 9 alle 17 |
/ | Passo | */15 * * * * = ogni 15 minuti |
L | Ultimo | 0 0 L * * = ultimo giorno del mese (solo Quartz) |
? | Nessun valore | 0 0 ? * MON = lunedì, qualsiasi giorno del mese (Quartz) |
Espressioni Cron Comuni
Ogni minuto
* * * * *
Ogni 5 minuti
*/5 * * * *
Ogni ora, all'ora esatta
0 * * * *
Ogni giorno a mezzanotte
0 0 * * *
Ogni giorno alle 9
0 9 * * *
Ogni lunedì alle 9
0 9 * * 1
Ogni giorno feriale (lun–ven) alle 8
0 8 * * 1-5
Ogni weekend a mezzogiorno
0 12 * * 0,6
Primo giorno di ogni mese a mezzanotte
0 0 1 * *
Ogni trimestre (gen, apr, lug, ott) a mezzanotte
0 0 1 1,4,7,10 *
Ogni 30 minuti tra le 9 e le 17 nei giorni feriali
*/30 9-17 * * 1-5
Le Trappole
"Ogni 2 ore" è 0 */2 * * *, non */2 * * * *
*/2 * * * * significa ogni 2 minuti. Il passo si applica al campo in cui si trova.
La domenica è sia 0 che 7
Nel cron standard, 0 e 7 significano entrambi domenica. Evita ambiguità — usa 0 in modo coerente.
Giorno del mese E giorno della settimana sono OR, non AND
0 0 1 * 1 viene eseguito il 1° di ogni mese E ogni lunedì — non solo i lunedì che cadono il 1°. Se vuoi "primo lunedì del mese", è più complesso (richiede logica di scripting al di fuori di cron).
Fuso orario
Cron viene eseguito nel fuso orario locale del server se non configurato diversamente. Un job alle 0 9 * * * su un server UTC viene eseguito alle 9 UTC — che potrebbe essere le 2 o le 23 nel tuo fuso orario.
Controlla sempre:
timedatectl # mostra il fuso orario corrente su Linux
Abbreviazioni (Non standard ma ampiamente supportate)
| Abbreviazione | Equivalente | Significato |
|---|---|---|
@yearly | 0 0 1 1 * | Una volta all'anno |
@monthly | 0 0 1 * * | Una volta al mese |
@weekly | 0 0 * * 0 | Una volta alla settimana (domenica) |
@daily | 0 0 * * * | Una volta al giorno (mezzanotte) |
@hourly | 0 * * * * | Una volta all'ora |
@reboot | — | All'avvio del sistema |
Genera e Valida Espressioni Cron
Il Generatore Cron ti permette di costruire espressioni visivamente — scegli lo schedule in italiano semplice, ottieni l'espressione cron. Niente più supposizioni su se 0 9 * * 1-5 sia corretto.
Funziona anche al contrario: incolla qualsiasi espressione cron e ottieni una spiegazione in linguaggio semplice di quando viene eseguita.
Scheda di Riferimento Rapido
# ┌──── minuto 0-59
# │ ┌─── ora 0-23
# │ │ ┌── giorno 1-31
# │ │ │ ┌─ mese 1-12
# │ │ │ │ ┌ weekday 0-7 (0=Dom)
# │ │ │ │ │
* * * * * ogni minuto
0 * * * * ogni ora
0 0 * * * ogni giorno a mezzanotte
0 9 * * 1 ogni lunedì alle 9
*/15 * * * * ogni 15 minuti
0 0 1 * * primo giorno di ogni mese