fixmint
IT

Come leggere un'espressione cron, campo per campo

Di · · 5 min di lettura

Un'espressione cron è una breve riga di testo che indica a un pianificatore quando eseguire un'attività. La forma più comune ha cinque campi separati da spazi: minuto, ora, giorno del mese, mese e giorno della settimana. La riga 0 9 * * 1-5 indica le 09:00 dal lunedì al venerdì. Ogni campo è un numero, un nome, una lista, un intervallo o un passo, oppure * per ogni valore, e un'attività viene eseguita in ogni momento in cui tutti i campi corrispondono.

Spiegazione cronCron parte all'orario sbagliatoUsalo gratis

I cinque campi

CampoValori ammessiEsempio
MinutoDa 0 a 5930 è il minuto 30 dell'ora
OraDa 0 a 239 è le 09:00, con orologio a 24 ore
Giorno del meseDa 1 a 3115 è il 15
MeseDa 1 a 12, oppure da JAN a DEC3 o MAR è marzo
Giorno della settimanaDa 0 a 6, oppure da SUN a SAT0 o SUN è domenica, 1 è lunedì

Alcuni sistemi accettano anche 7 per la domenica, ma non tutti, quindi usa 0 o SUN. In questa forma cron non ha un campo per i secondi, quindi il passo più piccolo è un minuto.

Liste, intervalli, passi e nomi

  • indica ogni valore del campo. * * * * viene eseguito ogni minuto.
  • Una lista usa le virgole. 0 9,17 * * * viene eseguito alle 09:00 e alle 17:00 ogni giorno.
  • Un intervallo usa il trattino. 1-5 nel campo del giorno della settimana indica dal lunedì al venerdì.
  • Un passo usa la barra. */15 nel campo dei minuti indica 0, 15, 30 e 45. 10-30/5 indica 10, 15, 20, 25 e 30.
  • I nomi, come MON-FRI, possono sostituire i numeri. Sono più facili da leggere, se il tuo pianificatore li accetta.

Queste parti si combinano. 0 8-18/2 * * * viene eseguito al minuto 0 ogni due ore dalle 08:00 alle 18:00.

Pianificazioni comuni

EspressioneSignificato
* * * * *Ogni minuto
/15 * * *Ogni 15 minuti
0 * * * *Al minuto 0 di ogni ora
0 2 * * *Ogni giorno alle 02:00
0 9 * * 1-5Alle 09:00, dal lunedì al venerdì
0 9,17 * * *Alle 09:00 e alle 17:00 ogni giorno
30 6 1 * *Alle 06:30 del primo giorno di ogni mese
0 0 * * 0Mezzanotte ogni domenica
0 0 1 1 *Mezzanotte del 1° gennaio
/5 9-17 * 1-5Ogni 5 minuti dalle 09:00 alle 17:55, dal lunedì al venerdì

Nota che 0 0 * * è mezzanotte, e 0 12 * * è mezzogiorno. Sbagliare l'ora è uno degli errori più comuni.

Giorno del mese e giorno della settimana

Quando sia il campo del giorno del mese sia quello del giorno della settimana sono limitati, l'attività viene eseguita quando corrisponde uno dei due. È la regola classica di Vixie cron e di molti sistemi derivati da esso. Quindi 0 0 13 * 5 viene eseguito a mezzanotte del 13 di ogni mese e anche ogni venerdì. Spesso ci si aspetta solo il venerdì 13, e si ottengono più esecuzioni di quelle previste.

Se uno dei due campi è *, conta solo l'altro. Per eseguire solo il venerdì 13, pianifica un'attività per ogni venerdì e verifica la data all'interno dello script. Altri pianificatori, inclusi alcuni servizi cloud, possono usare regole diverse, quindi leggi la loro documentazione.

Fusi orari e ora legale

Cron funziona secondo l'orologio della macchina o del servizio su cui gira, che di solito è il fuso orario locale di quella macchina. Un'attività impostata per le 02:30 viene eseguita alle 02:30 di quell'orologio. Verifica prima il fuso (su Linux, date lo mostra). Se vuoi che le attività seguano un unico orologio ovunque, molti team usano server in UTC, e alcuni pianificatori permettono di impostare un fuso orario per ogni attività.

L'ora legale cambia l'orologio due volte all'anno. In primavera, in molti luoghi si passa direttamente dalle 02:00 alle 03:00, quindi un'attività alle 02:30 non ha un momento in cui essere eseguita. In autunno, l'ora compresa tra le 01:00 e le 01:59 si ripete due volte. I pianificatori gestiscono questi casi in modi diversi. Alcuni saltano l'attività, altri la eseguono una volta, altri ancora due volte. Tieni le attività lontane dalla fascia del cambio di orario nelle prime ore del mattino, oppure usa UTC, se la differenza è importante per te.

Sei campi e Quartz

Alcuni pianificatori aggiungono un campo per i secondi all'inizio, quindi /10 * * * * viene eseguito ogni 10 secondi. Il pianificatore Quartz per Java usa secondi, minuti, ore, giorno del mese, mese, giorno della settimana e un anno facoltativo, e aggiunge quattro caratteri speciali:

  • ? significa «nessun valore specifico». Quartz lo richiede in uno dei due campi, il giorno del mese o il giorno della settimana, quello che non imposti.
  • L significa ultimo. L nel campo del giorno del mese è l'ultimo giorno del mese, e 6L nel campo del giorno della settimana è l'ultimo venerdì.
  • W significa giorno feriale più vicino. 15W è il giorno feriale più vicino al 15, e non passa mai a un altro mese.
  • # significa l'ennesimo giorno della settimana. 6#3 è il terzo venerdì.

Quartz numera i giorni in modo diverso dalla forma a cinque campi. Il suo 1 è la domenica e il 7 è il sabato, quindi dal lunedì al venerdì è 2-6, non 1-5. Verifica sempre quale formato usa il tuo pianificatore prima di copiare una riga.

Errori comuni

  • */7 nel campo dei minuti. I valori sono 0, 7, 14 e così via fino a 56. Il successivo sarebbe 63, che non esiste, quindi l'esecuzione dopo il 56 è al minuto 0 dell'ora successiva. Lo scarto è solo di quattro minuti, e la spaziatura è irregolare. Usa un passo che divida 60 in modo esatto, come 5, 10, 15 o 30.
  • 30 febbraio. Non esiste questa data, quindi 0 0 30 2 * non viene mai eseguito. Lo stesso vale per il 31 in un mese di 30 giorni. Con la regola dell'uno o dell'altro, una limitazione sul giorno della settimana può comunque far eseguire l'attività in altri giorni, quindi verifica il risultato.
  • Ora 24 o minuto 60. Sono fuori intervallo. La maggior parte dei pianificatori li rifiuta al salvataggio, ma non tutti.
  • Aspettarsi i secondi. Una riga a cinque campi viene eseguita solo a minuti interi.
  • Confondere cron con le espressioni regolari. In cron, significa ogni valore. In un'espressione regolare, significa ripetere l'elemento che lo precede. Per i pattern usa il tester regex, e tieni separate le righe cron.

Verifica le prossime esecuzioni

Prima di fidarti di una pianificazione, leggi la riga in parole semplici ed elenca i suoi prossimi orari di esecuzione. La spiegazione cron fa entrambe le cose, ed è il modo più rapido per individuare la regola dell'uno o dell'altro o un passo strano.

Risposte rapide

Il primo campo indica minuti o secondi?

Minuti, nella forma standard a cinque campi. Solo alcuni pianificatori a sei campi aggiungono i secondi, e li mettono per primi.

Perché la mia attività viene eseguita il venerdì e anche il 13?

Sono impostati sia il campo del giorno del mese sia quello del giorno della settimana, quindi l'attività viene eseguita quando corrisponde uno dei due. Imposta un campo su * se vuoi solo l'altro.

Cron usa UTC?

Solo se la macchina o il servizio è impostato su UTC. Altrimenti usa il fuso orario locale di quel sistema.

Tradotto dal Originale in inglese con l'assistenza dell'IA.

Commenti

    Nessun commento per ora. Sii il primo.

    La tua valutazione (facoltativa)

    La tua email non viene mai mostrata né conservata.

    Copertina di Agentic AI in the BrowserAgentic AI in the Browser

    Casi d'uso per flussi di lavoro con intelligenza artificiale nativi del browser e pensati per la privacy: la stessa idea del fare tutto sul proprio dispositivo su cui si basa fixmint.

    $4.99Acquistalo su GumroadIn inglese