Come leggere le espressioni cron
Un’espressione cron descrive una pianificazione ricorrente in pochi campi separati da spazi. L’idea è semplice, ma l’ordine dei campi e i caratteri speciali variano da un sistema all’altro. Questa guida mostra come leggere i formati più comuni.
I cinque campi di Unix
Il cron classico di Unix e Linux usa cinque campi, letti da sinistra a destra:
minuto ora giorno-del-mese mese giorno-della-settimana
Quindi 30 9 * * 1-5 significa "alle 09:30, dal lunedì al venerdì". I minuti vanno da 0 a 59, le ore da 0 a 23, i giorni del mese da 1 a 31 e i mesi da 1 a 12. Il giorno della settimana va da 0 a 6, dove 0 indica la domenica (molte implementazioni accettano anche 7 per la domenica). La maggior parte delle versioni accetta anche nomi come JAN o MON e macro come @daily o @hourly.
I formati Spring, Quartz e AWS
Altri pianificatori aggiungono campi, e questa è la causa di confusione più comune quando si copia un’espressione da un sistema a un altro.
| Formato | Campi | Giorno della settimana |
|---|---|---|
| Unix / Linux | 5: minuto ora giorno mese giorno della settimana | 0–6, domenica = 0 |
| Spring | 6: secondo minuto ora giorno mese giorno della settimana | 0–7, domenica = 0 o 7 |
| Quartz | 6 o 7: secondo minuto ora giorno mese giorno della settimana [anno] | 1–7, domenica = 1 |
| AWS EventBridge | 6: minuto ora giorno mese giorno della settimana anno | 1–7, domenica = 1 |
Le stesse cifre possono avere significati diversi: 0 0 12 * * ? significa "ogni giorno a mezzogiorno" in Quartz, mentre letto con 5 campi non sarebbe valido. Anche i numeri dei giorni della settimana cambiano: in Quartz e AWS 2 è il lunedì, ma nel cron di Unix è il martedì. I nomi dei giorni come MON evitano questa ambiguità, dove sono supportati.
Caratteri speciali
*ogni valore del campo.,un elenco, ad es.1,15.-un intervallo, ad es.9-17oMON-FRI./un passo:*/15nel campo dei minuti significa ogni 15 minuti;5/15inizia da 5 (non supportato dal cron classico di Unix, dove si usa un intervallo come5-59/15).?"nessun valore specifico"; Quartz e AWS lo richiedono nel giorno del mese o nel giorno della settimana.Lultimo:Lnel giorno del mese è l’ultimo giorno del mese; in Quartz,6Lnel giorno della settimana è l’ultimo venerdì.Wgiorno feriale più vicino:15Wè il giorno feriale più vicino al 15.#n-esimo giorno della settimana del mese:6#3è il terzo venerdì nella numerazione di Quartz e AWS.
L, W e # sono estensioni che il cron classico di Unix non supporta.
Giorno del mese e giorno della settimana
Quando entrambi i campi dei giorni sono limitati, i sistemi non concordano su come combinarli. Nel cron classico di Unix, il job viene eseguito quando corrisponde uno qualsiasi dei due campi: 0 9 13 * 5 viene eseguito il 13 di ogni mese e ogni venerdì, non solo venerdì 13. Spring richiede che corrispondano entrambi. Quartz e AWS evitano il problema richiedendo ? in uno dei due campi.
L’Analizzatore cron di LeedyBox applica la regola del formato scelto e spiega nel riepilogo se deve corrispondere uno dei due giorni o entrambi.
Fusi orari e ora legale
Un’espressione cron non include un fuso orario. Viene eseguita nel fuso orario del sistema o del servizio che la esegue, che può essere l’ora locale del server o UTC. Un job scritto per le 09:00 ora locale può essere eseguito a un’ora diversa se il server usa UTC.
L’ora legale aggiunge altri casi limite. Quando gli orologi vanno avanti, un orario come le 02:30 può non esistere quel giorno; quando tornano indietro, può verificarsi due volte. A seconda dell’implementazione, un job in quella fascia può essere saltato, eseguito in ritardo o eseguito due volte. Pianificare i job importanti fuori dalla fascia del cambio d’ora, o in UTC, riduce le sorprese. L’Analizzatore cron ti permette di scegliere un fuso orario ed elenca le prossime esecuzioni, così puoi controllare le date intorno a un cambio d’ora.
Domande frequenti
Come eseguo un job ogni 5 minuti?
Nel cron di Unix, usa */5 * * * *. In Spring, aggiungi un campo dei secondi all’inizio: 0 */5 * * * *.
Perché la mia espressione Quartz non funziona nel crontab di Linux?
Le espressioni Quartz iniziano con un campo dei secondi e possono usare ? o L, che crontab non accetta. Riscrivi l’espressione nel formato a 5 campi.
Le prossime esecuzioni mostrate dall’analizzatore sono esatte?
Vengono calcolate nel browser per il formato e il fuso orario selezionati. Verifica la pianificazione sul sistema che eseguirà il job, perché le implementazioni possono differire.