Sintassi delle espressioni cron
Un'espressione cron è cinque campi che descrivono quando qualcosa dovrebbe essere eseguito. Ogni campo dice quali valori della sua unità sono accettabili, e il lavoro si avvia ogni minuto dove tutti e cinque concordano. Questo è l'intero modello: non c'è nozione di durata, nessun "ogni 90 minuti" e nessuno stato di prossima esecuzione conservato da nessuna parte.
I campi si leggono da sinistra a destra come minuto, ora, giorno del mese, mese, giorno della settimana. Gli esempi in basso sono quelli che le persone effettivamente raggiungono, e ognuno viene analizzato dal suo proprio parser cron di questo sito prima che questa pagina sia costruita.
L'ultima sezione elenca la sintassi che sembra cron ma non è accettata qui: estensioni Quartz e Jenkins, e la forma a sei campi con secondi. Vale la pena riconoscerle, perché un'espressione copiata che usa una di loro semplicemente fallirà.
I cinque campi
7Una riga cron è composta da cinque campi separati da spazi, quindi il comando. Ogni campo deve essere presente; non c'è modo di ometterne uno.
| Espressione | Intervallo | Significato |
|---|---|---|
| * * * * * | min hod dom mes dow | I cinque campi in ordine: minuto, ora, giorno del mese, mese, giorno della settimanaCinque asterischi significa ogni minuto di ogni giorno — l'espressione più lenta possibile. |
| minute | 0-59 | Primo campo |
| hour | 0-23 | Secondo campo, su un orologio a 24 ore |
| day of month | 1-31 | Terzo campoUn giorno che non esiste in un dato mese è semplicemente saltato — 31 si esegue sette volte l'anno, non dodici. |
| month | 1-12 | Quarto campo |
| day of week | 0-7 | Quinto campo, domenica per primoSia 0 che 7 significano domenica, per cui l'intervallo va fino a sette piuttosto che sei. |
| 0 5 13 * 5 | Quando entrambi i campi dei giorni sono limitati, cron si esegue su uno qualsiasi di essi — non su entrambiQuesto si esegue il 13° e su ogni venerdì, quindi non è "venerdì 13". È l'unica regola del cron che sorprende tutti. |
Operatori
10Gli stessi quattro operatori funzionano in ogni campo; solo i numeri che accettano cambiano.
| Espressione | Intervallo | Significato |
|---|---|---|
| * | Ogni valore che il campo consente | |
| 1,15,30 | Un elenco di valori individuali | |
| 9-17 | Un intervallo inclusivo | |
| */15 | Ogni n-esimo valore sull'intero campo*/15 nel campo dei minuti significa :00, :15, :30 e :45 — conta dall'inizio dell'intervallo, non da adesso. | |
| 9-17/2 | Ogni n-esimo valore all'interno di un intervallo | |
| 5/10 | Ogni n-esimo valore da un punto di partenza alla fine del campo | |
| 0,30 9-17 * * 1-5 | Gli operatori si combinano liberamente in qualsiasi campoAlle mezz'ora, tra le nove e le cinque, da lunedì a venerdì. | |
| JAN-DEC | 1-12 | Nomi dei mesi, tre lettere, non sensibile alle maiuscole |
| SUN-SAT | 0-6 | Nomi dei giorni, tre lettere, non sensibile alle maiuscole |
| 7 | 0 | Domenica, scritta dall'altro lato |
Macro abbreviate
7Sette nomi che rappresentano un'intera espressione. Sono una comodità del formato del file crontab piuttosto che parte della grammatica dei campi, quindi uno scheduler che legge stringhe cron non necessariamente le accetta.
| Espressione | Intervallo | Significato |
|---|---|---|
| @hourly | 0 * * * * | All'inizio di ogni ora |
| @daily | 0 0 * * * | Una volta al giorno a mezzanotte |
| @midnight | 0 0 * * * | Uguale a @daily |
| @weekly | 0 0 * * 0 | Una volta a settimana, domenica a mezzanotte |
| @monthly | 0 0 1 * * | Il primo del mese a mezzanotte |
| @yearly | 0 0 1 1 * | Il primo di gennaio a mezzanotte |
| @annually | 0 0 1 1 * | Uguale a @yearly |
Esempi risolti
14Leggi uno da destra a sinistra quando smette di avere senso: il campo più grossolano è a destra e decide in quali giorni anche i campi più fini vengono consultati.
| Espressione | Intervallo | Significato |
|---|---|---|
| * * * * * | Ogni minuto | |
| */5 * * * * | Ogni cinque minuti | |
| 0 * * * * | Ogni ora, all'inizio | |
| 0,30 * * * * | Ogni mezz'ora | |
| 0 3 * * * | Ogni giorno alle 03:00 | |
| 0 9,17 * * * | Due volte al giorno, alle 09:00 e 17:00 | |
| */15 9-17 * * 1-5 | Ogni quarto d'ora durante l'orario di lavoro nei giorni lavorativi | |
| 0 8 * * 1-5 | Nei giorni feriali alle 08:00 | |
| 0 10 * * 6,0 | Sabato e domenica alle 10:00 | |
| 30 7 * * MON | Lunedì alle 07:30 | |
| 0 0 1 * * | Mezzanotte del primo giorno di ogni mese | |
| 0 0 28-31 * * | Ogni giorno nella parte finale del meseIl cron standard non conosce "ultimo giorno del mese". Questo si esegue fino a quattro volte; la soluzione solita è uno script che controlla la data e termina presto. | |
| 0 0 1 1,4,7,10 * | Mezzanotte del primo giorno di ogni trimestre | |
| 0 0 1 1 * | Una volta all'anno, all'inizio del 1° gennaio |
Estensioni che questo sito non accetta
6Quartz, Jenkins e alcuni scheduler cloud le aggiungono. Sono elencate così riconosci in un crontab altrui — il parser su questo sito rifiuta ognuna, e così fa il cron spedito con Linux.
| Espressione | Intervallo | Significato |
|---|---|---|
| ? | "Nessun valore specifico" nel campo dei giorni che l'altro già limita | |
| L | L'ultimo giorno del mese, o l'ultimo giorno della settimana dato | |
| 15W | Il giorno feriale più vicino al 15 | |
| FRI#3 | Il terzo venerdì del mese | |
| */30 * * * * * | Un sesto campo per i secondi, davantiSei campi, non cinque. Quartz e varie librerie linguistiche usano questa forma; il file crontab no. | |
| @reboot | Eseguire una volta quando la macchina si avviaVero nel crontab, ma non è una pianificazione — non c'è prossima esecuzione da calcolare, ecco perché il parser qui la declina. |