Espressioni Cron

Introduzione

cron è uno strumento UNIX in circolazione da molto tempo, quindi le sue capacità di pianificazione sono potenti e comprovate.

Le espressioni Cron sono potenti, ma possono creare confusione. Questo tutorial mira a eliminare parte del mistero della creazione di un'espressione cron, fornendo agli utenti una risorsa che possono visitare prima di dover chiedere in un forum o in una mailing list.

Formato

Un'espressione cron è una stringa composta da 6 o 7 campi separati da spazi bianchi. I campi possono contenere uno qualsiasi dei valori consentiti, insieme a varie combinazioni di caratteri speciali consentiti per quel campo. I campi sono i seguenti:

Campo Obbligatorio Valori Ammessi Caratteri Speciali Ammessi
Secondi SI 0-59 , - * /
Minuti SI 0-59 , - * /
Ore SI 0-23 , - * /
Giorno del mese SI 1-31 , - * ? / L W
Mese SI 1-12 or JAN-DEC , - * /
Giorno dell'anno SI 1-7 or SUN-SAT , - * ? / L #
Anno NO empty, 1970-2099 , - * /

Quindi le espressioni cron possono essere semplici come questa: * * * * ? *

o più complesse, come questa: 0/5 14,18,3-39,52 * ? GEN, MAR, SET LUN-VEN 2002-2010

Caratteri speciali

  • * ("tutti i valori") - utilizzato per selezionare tutti i valori all'interno di un campo. Ad esempio, "*" nel campo dei minuti significa "ogni minuto".

  •  ? ("nessun valore specifico") - utile quando è necessario specificare qualcosa in uno dei due campi in cui è consentito il carattere, ma non nell'altro. Ad esempio, se voglio che il mio trigger si attivi in ​​un particolare giorno del mese (diciamo, il 10), ma non mi interessa quale giorno della settimana sarà, metterei "10" nel giorno di -mese campo e "?" nel campo del giorno della settimana. Vedere gli esempi seguenti per chiarimenti.

  • - - utilizzato per specificare gli intervalli. Ad esempio, "10-12" nel campo dell'ora significa "le ore 10, 11 e 12".

  • , - utilizzato per specificare valori aggiuntivi. Ad esempio, "LUN,MER,VEN" nel campo del giorno della settimana significa "i giorni lunedì, mercoledì e venerdì".

  • / - utilizzato per specificare gli incrementi. Ad esempio, "0/15" nel campo dei secondi significa "i secondi 0, 15, 30 e 45". E "5/15" nel campo dei secondi significa "i secondi 5, 20, 35 e 50". Puoi anche specificare "/" dopo il carattere "" - in questo caso "" equivale ad avere "0" prima di "/". '1/3' nel campo del giorno del mese significa "spara ogni 3 giorni a partire dal primo giorno del mese".

  • L ("ultimo") - ha un significato diverso in ciascuno dei due campi in cui è consentito. Ad esempio, il valore "L" nel campo del giorno del mese significa "l'ultimo giorno del mese" - giorno 31 per gennaio, giorno 28 per febbraio negli anni non bisestili. Se utilizzato da solo nel campo del giorno della settimana, significa semplicemente “7” o “SAT”. Ma se utilizzato nel campo del giorno della settimana dopo un altro valore, significa "l'ultimo xxx giorno del mese" - ad esempio "6L" significa "l'ultimo venerdì del mese". Puoi anche specificare un offset dall'ultimo giorno del mese, ad esempio "L-3", che significherebbe il terzultimo giorno del mese di calendario. Quando si utilizza l'opzione "L", è importante non specificare elenchi o intervalli di valori, poiché si ottengono risultati confusi o imprevisti.

  • W ("giorno della settimana") - utilizzato per specificare il giorno della settimana (lunedì-venerdì) più vicino al giorno specificato. Ad esempio, se si specifica “15W” come valore per il campo del giorno del mese, il significato è: “il giorno della settimana più vicino al 15 del mese”. Quindi, se il 15 è un sabato, il grilletto scatterà venerdì 14. Se il 15 è una domenica, il grilletto scatterà lunedì 16. Se il 15 è un martedì, si attiverà martedì 15. Tuttavia, se si specifica "1W" come valore per il giorno del mese e il 1° è un sabato, il trigger si attiverà lunedì 3, poiché non "salterà" oltre il limite dei giorni di un mese. Il carattere "W" può essere specificato solo quando il giorno del mese è un solo giorno, non un intervallo o un elenco di giorni.

    I caratteri 'L' e 'W' possono anche essere combinati nel campo del giorno del mese per ottenere 'LW', che si traduce in *"ultimo giorno della settimana del mese"*.

  • # - utilizzato per specificare "l'ennesimo" XXX giorno del mese. Ad esempio, il valore di “6#3” nel campo del giorno della settimana significa “il terzo venerdì del mese” (giorno 6 = venerdì e “#3” = il 3° del mese). Altri esempi: “2#1” = il primo lunedì del mese e “4#5” = il quinto mercoledì del mese. Tieni presente che se specifichi "#5" e non ci sono 5 del giorno della settimana specificato nel mese, quel mese non si verificherà alcuna attivazione.

I caratteri legali ei nomi di mesi e giorni della settimana non fanno distinzione tra maiuscole e minuscole. LUN è uguale a lun.

Esempi

Puoi trovare vari strumenti online molto utili, che possono aiutarti a creare la tua espressione cron come questi: http://www.cronmaker.com, https://crontab.guru

Ecco alcuni esempi completi:

**Espressione** **Significato**
0 0 12 * * ? Attiva alle 12:00 (mezzogiorno) tutti i giorni
0 15 10 ? * * Attiva alle 10:15 tutti i giorni
0 15 10 * * ? Attiva alle 10:15 tutti i giorni
0 15 10 * * ? * Attiva alle 10:15 tutti i giorni
0 15 10 * * ? 2005 Attiva alle 10:15 tutti i giorni
0 * 14 * * ? Attiva ogni minuto a partire dalle 14:00 e termina alle 14:59, tutti i giorni
0 0/5 14 * * ? Attiva ogni 5 minuti a partire dalle 14:00 e termina alle 14:55, tutti i giorni
0 0/5 14,18 * * ? Attiva ogni 5 minuti a partire dalle 14:00 e termina alle 14:55, E ogni 5 minuti a partire dalle 18:00 e termina alle 18:55, tutti i giorni
0 0-5 14 * * ? Attiva ogni minuto a partire dalle 14:00 e termina alle 14:05, tutti i giorni
0 10,44 14 ? 3 WED Attiva alle 14:10 e alle 14:44 ogni mercoledì nel mese di marzo.
0 15 10 ? * MON-FRI Attiva alle 10:15 ogni lunedì, martedì, mercoledì, giovedì e venerdì
0 15 10 15 * ? Attiva alle 10:15 del 15 di ogni mese
0 15 10 L * ? Attiva alle 10:15 l'ultimo giorno di ogni mese
0 15 10 L-2 * ? Attiva alle 10:15 del penultimo ultimo giorno di ogni mese
0 15 10 ? * 6L Attiva alle 10:15 l'ultimo venerdì di ogni mese
0 15 10 ? * 6L Attiva alle 10:15 l'ultimo venerdì di ogni mese
0 15 10 ? * 6L 2002-2005 Attiva alle 10:15 ogni ultimo venerdì di ogni mese negli anni 2002, 2003, 2004 e 2005
0 15 10 ? * 6#3 Attiva alle 10:15 il terzo venerdì di ogni mese
0 0 12 1/5 * ? Attiva alle 12:00 (mezzogiorno) ogni 5 giorni ogni mese, a partire dal primo giorno del mese.
0 11 11 11 11 ? Attiva ogni 11 novembre alle 11:11.