bitlvl
IT

Spiegazione di espressioni cron

Scrivi i cinque campi di una voce crontab. Ottieni la pianificazione in parole semplici e le prossime dieci volte in cui scatterebbe, nel fuso orario che scegli.

I risultati e i messaggi di questo strumento sono mostrati in inglese.

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
SintassiSignificatoEsempio
*Ogni valore* * * * *ogni minuto
5Esattamente questo valore5 0 * * *00:05 ogni giorno
1-5Un intervallo0 9 * * 1-509:00 nei giorni feriali
*/15Ogni n-esimo valore*/15 * * * *ogni 15 minuti
1,15Una lista0 0 1,15 * *mezzanotte il 1º e il 15
8-18/2Passo dentro un intervallo0 8-18/2 * * *ogni 2 ore dalle 08:00 alle 18:00
@dailyMacro@dailyuguale 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 PATH nel 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 colpisce date +%F.
  • Le espressioni a sei campi con una colonna dei secondi sono sintassi Quartz/Spring, e anche i non standard L, W e # 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.