Sintassi crontab
┌───────────── minuto 0–59
│ ┌─────────── ora 0–23
│ │ ┌───────── giorno del mese 1–31
│ │ │ ┌─────── mese 1–12 o jan–dec
│ │ │ │ ┌───── giorno della settimana 0–7 o sun–sat (0 e 7 sono domenica)
│ │ │ │ │
* * * * * comando da eseguire | Sintassi | Significato | Esempio | |
|---|---|---|---|
| * | Ogni valore | * * * * * | ogni minuto |
| 5 | Esattamente questo valore | 5 0 * * * | 00:05 ogni giorno |
| 1-5 | Un intervallo | 0 9 * * 1-5 | 09:00 nei giorni feriali |
| */15 | Ogni n-esimo valore | */15 * * * * | ogni 15 minuti |
| 1,15 | Una lista | 0 0 1,15 * * | mezzanotte il 1º e il 15 |
| 8-18/2 | Passo dentro un intervallo | 0 8-18/2 * * * | ogni 2 ore dalle 08:00 alle 18:00 |
| @daily | Macro | @daily | uguale a 0 0 * * * |
La trappola giorno del mese / giorno della settimana
Se sia il campo del giorno del mese sia quello del giorno della settimana sono limitati, il cron standard esegue quando uno dei due corrisponde, non entrambi. 0 0 13 * 5 scatta ogni 13 e ogni venerdì, non solo venerdì 13. Lo strumento segnala questo caso.
Fusi orari e ora legale
Cron gira nel fuso orario di sistema della macchina (o nella variabile CRON_TZ / TZ dove supportata). La notte in cui gli orologi avanzano, un job pianificato per le 02:30 può non girare affatto; quando tornano indietro, può girare due volte. I job che devono girare esattamente una volta al giorno sono più sicuri tra le 03:00 e le 23:00, o in UTC. La lista delle esecuzioni qui sopra usa le regole di calendario reali del fuso scelto, quindi puoi controllare direttamente una notte di cambio ora.
Altre cose da sapere
- Cron ha risoluzione di un minuto. Per i secondi, usa un timer systemd o un ciclo nel job.
- L’ambiente è minimale: imposta
PATHnel crontab o usa percorsi assoluti, e redirigi l’output o ti verrà spedito via mail. %nel campo del comando è un a capo se non viene scritto come\%, cosa che colpiscedate +%F.- Le espressioni a sei campi con una colonna dei secondi sono sintassi Quartz/Spring, e anche i non standard
L,We#sono Quartz. Il crontab semplice non li accetta.
Domande
Come eseguo un job cron ogni 5 minuti?
*/5 * * * *. Per ogni 5 minuti solo in orario di lavoro: */5 9-17 * * 1-5.
Come eseguo qualcosa a mezzanotte ogni giorno?
0 0 * * *, oppure la macro @daily. Per le 00:30 usa 30 0 * * *.
Come pianifico l’ultimo giorno del mese?
Il cron standard non può esprimerlo direttamente. Esegui nei giorni 28–31 e lascia che lo script controlli se domani è il 1º: 0 0 28-31 * * [ "$(date -d tomorrow +%d)" = "01" ] && /percorso/del/job.
La domenica è giorno della settimana 0 o 7?
Entrambi. 0 e 7 sono domenica nella maggior parte delle implementazioni di cron; lunedì è 1. Sono accettati anche i nomi (sun, mon), più difficili da sbagliare.
Perché il mio job è girato all’ora sbagliata?
Quasi sempre il fuso orario: il server è in UTC e ti aspettavi l’ora locale, o viceversa. Controlla con date sul server, o imposta CRON_TZ=Europe/Rome in cima al crontab dove supportato (cronie, Vixie cron).
Che differenza c’è tra cron e i timer systemd?
I timer possono girare con espressioni di calendario con i secondi, recuperare le esecuzioni mancate dopo un riavvio (Persistent=true), scrivere nel journal e dipendere da altre unit. Cron è più semplice e universale. Entrambi vanno bene per i normali job pianificati.