Vai al contenuto
LeedyBox
Sostieni

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-17 o MON-FRI.
  • / un passo: */15 nel campo dei minuti significa ogni 15 minuti; 5/15 inizia da 5 (non supportato dal cron classico di Unix, dove si usa un intervallo come 5-59/15).
  • ? "nessun valore specifico"; Quartz e AWS lo richiedono nel giorno del mese o nel giorno della settimana.
  • L ultimo: L nel giorno del mese è l’ultimo giorno del mese; in Quartz, 6L nel giorno della settimana è l’ultimo venerdì.
  • W giorno 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.