Come leggere un'espressione cron, campo per campo
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.
I cinque campi
| Campo | Valori ammessi | Esempio |
|---|---|---|
| Minuto | Da 0 a 59 | 30 è il minuto 30 dell'ora |
| Ora | Da 0 a 23 | 9 è le 09:00, con orologio a 24 ore |
| Giorno del mese | Da 1 a 31 | 15 è il 15 |
| Mese | Da 1 a 12, oppure da JAN a DEC | 3 o MAR è marzo |
| Giorno della settimana | Da 0 a 6, oppure da SUN a SAT | 0 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-5nel campo del giorno della settimana indica dal lunedì al venerdì. - Un passo usa la barra.
*/15nel campo dei minuti indica 0, 15, 30 e 45.10-30/5indica 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
| Espressione | Significato |
|---|---|
* * * * * | Ogni minuto |
/15 * * * | Ogni 15 minuti |
0 * * * * | Al minuto 0 di ogni ora |
0 2 * * * | Ogni giorno alle 02:00 |
0 9 * * 1-5 | Alle 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 * * 0 | Mezzanotte ogni domenica |
0 0 1 1 * | Mezzanotte del 1° gennaio |
/5 9-17 * 1-5 | Ogni 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.Lsignifica ultimo.Lnel campo del giorno del mese è l'ultimo giorno del mese, e6Lnel campo del giorno della settimana è l'ultimo venerdì.Wsignifica 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
*/7nel 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.


