Crontab Guru
Incolla un’espressione cron e ottieni una spiegazione campo per campo, in inglese semplice, di cosa fa. Nessun bisogno di ricordare l’ordine dei campi o di consultare gli intervalli: il guru esamina ciascuno dei cinque campi (minuto, ora, giorno del mese, mese e giorno della settimana) e legge l’espressione da sinistra a destra. Utile per controllare una riga di crontab prima di implementarla o per spiegare una riga ereditata.
Come usare il guru
-
1
Incolla l'espressione
Copia qualsiasi espressione cron standard a 5 campi (per esempio `0 9 * * 1-5`) nel campo di input.
-
2
Chiedi la spiegazione
Clicca su Explain Cron e lo strumento restituisce una descrizione riga per riga di ogni campo: minuto, ora, giorno del mese, mese e giorno della settimana.
-
3
Leggi la descrizione
La spiegazione viene generata in inglese, per esempio "Minute: every 5 minutes" oppure "Hour: from 9 through 17."
-
4
Controlla prima di implementare
Usa la spiegazione per confermare che la pianificazione faccia ciò che vuoi prima di metterla nel tuo crontab, nella configurazione CI o in un manifest Kubernetes.
Scheda di riferimento dei campi
┌───────────── minuto (0-59)
│ ┌─────────── ora (0-23)
│ │ ┌───────── giorno del mese (1-31)
│ │ │ ┌─────── mese (1-12 o GEN-DIC)
│ │ │ │ ┌───── giorno della settimana (0-6 o DOM-SAB; Dom = 0 o 7)
│ │ │ │ │
* * * * *
Operatori nelle espressioni cron
| Operatore | Significato | Esempio |
|---|---|---|
* |
Ogni valore | * * * * * |
, |
Elenco di valori | 0,15,30,45 |
- |
Intervallo | 9-17 |
/ |
Passo (inizio/passo) | */5, 0-30/5 |
L |
Ultimo (giorno del mese o ultimo giorno feriale, Quartz) | L, 5L |
W |
Giorno feriale più vicino | 15W (Quartz) |
# |
N-esimo giorno feriale del mese | 1#3 (Quartz) |
? |
Nessun valore specifico | Solo Quartz |
L’ordine di lettura è importante
0 */2 * * 1-5 si legge da sinistra a destra come: minuto 0, ogni 2 ore, qualsiasi giorno del mese, qualsiasi mese, da lunedì a venerdì. Per abitudine, a volte si leggono i campi da destra a sinistra e ci si confonde; inizia sempre dal minuto.
La trappola dei “ogni X minuti”
*/10 * * * * si attiva ai minuti 0, 10, 20, 30, 40, 50, non “ogni 10 minuti da quando è stato creato il lavoro.” I passi cron misurano sempre dall’inizio dell’intervallo del campo. Se distribuisci un lavoro alle 12:03, la prima esecuzione è alle 12:10, non alle 12:13.
Per i lavori che hanno davvero bisogno di “N minuti dopo l’ultima esecuzione,” usa un pianificatore con un timer persistente (timer systemd con OnUnitActiveSec, o pianificazione a livello di applicazione con un timestamp dell’ultima esecuzione memorizzato).
Insidie di cron che conviene conoscere
- Giorno del mese + giorno della settimana entrambi impostati: la maggior parte delle implementazioni cron lo tratta come comportamento OR, probabilmente non quello che vuoi.
- Passo di 0:
*/0non è valido. - Intervallo che si avvolge:
22-2per le ore non funziona nel cron classico; usa22-23,0-2. - 30 febbraio: un programma come
0 0 30 2 *non si attiva mai. - Ambiguità DST: i lavori pianificati tra le 2 e le 3 di notte possono attivarsi due volte o zero volte nei giorni di cambio ora.
Cron vs pianificatori moderni
Unix cron è ancora ovunque, ma per qualsiasi cosa critica probabilmente vorrai:
- timer systemd: catturare esecuzioni mancate, supportare offset casuali, leggere dai file di unità.
- Kubernetes CronJob: dichiarativo, retry, consapevole del fuso orario in 1.25+.
- Airflow / Prefect / Dagster: per lavori con dipendenze, retry, backfill e osservabilità.
- Pianificazione di GitHub Actions: cron a 5 campi, solo UTC, intervallo minimo di 5 minuti, consegna best-effort.
Il cron in sé è un ottimo formato, ma un cattivo pianificatore per lavori che non devono essere persi.
Domande frequenti
Perché il giorno della settimana 0 è domenica nel cron standard (e 7 è anche domenica, supportando entrambe le convenzioni). Lunedì è 1. Quartz numera i giorni della settimana da 1 a 7 con domenica = 1, il che confonde spesso chi passa da un’implementazione all’altra.
Il cron Unix classico funziona nel fuso orario locale del server, qualunque cosa dica /etc/timezone. Kubernetes CronJob, GitHub Actions e la maggior parte dei pianificatori cloud funzionano in UTC per impostazione predefinita. Conferma sempre e, quando possibile, usa UTC per evitare sorprese legate all’ora legale.
Il cron classico non può esprimerlo direttamente. Soluzione alternativa: esegui ogni lunedì e controlla la data dentro lo script: [ $(date +%d) -le 7 ] && ./job.sh. Quartz lo supporta nativamente con 1#1.
No. Ogni pianificazione ha bisogno della propria riga. Ma puoi combinare più pianificazioni in una riga con elenchi: 0 9,17 * * * si attiva alle 9 e alle 17. Per pianificazioni che non possono essere espresse in una singola riga, aggiungi più righe che puntano allo stesso comando.
Strumenti correlati
Riferimento Tabella ASCII
Tabella ASCII completa da 0 a 127 con decimale, esadecimale, ottale, binario e riferimento numerico HTML per ogni carattere, inclusi i codici di controllo come NUL, LF e DEL.
Generatore di lettere casuali
Genera lettere A-Z casuali. Scegli la quantità, usa maiuscole, minuscole o un mix, e applica il risultato a giochi, spunti o attività in classe.
Riferimento ai caratteri HTML
Elenco ricercabile delle entità HTML, dei loro codici nominati e numerici, e copia con un clic per caratteri e simboli speciali.
Riferimento scorciatoie da tastiera
Cerca le scorciatoie predefinite documentate di VS Code, Chrome e Bash con GNU Readline su macOS, Windows e Linux.
Trova nome colore
Trova il colore CSS standard con nome più vicino a un valore HEX, RGB o HSL usando la differenza CIEDE2000.
Generatore di Palette di Colori
Genera palette monocromatiche, analoghe, complementari, triadiche o tetradiche da un colore base HEX ed esporta variabili CSS pronte da copiare.