Generatore espressioni Cron
Crea e decodifica espressioni cron a cinque campi visivamente.
Format: minute hour day-of-month month day-of-week
Use * for any value, 0-5 for ranges, 1,3,5 for lists, */5 for every N
* * * * * every minute
Cos'è cron?
Cron è lo scheduler di lavori standard presente nei sistemi operativi Unix e Linux. Esegue comandi o script a orari e intervalli specificati, rendendolo essenziale per l'amministrazione di sistema, l'automazione DevOps e la pianificazione di applicazioni backend. Il nome deriva dalla parola greca chronos, che significa tempo.
Un'espressione cron è una stringa compatta di cinque campi che definisce quando un lavoro deve essere eseguito. Ogni campo specifica una componente temporale — minuto, ora, giorno del mese, mese e giorno della settimana. Insieme, questi cinque campi possono esprimere pianificazioni che vanno da "ogni minuto" a "una volta all'anno in una data specifica".
Sintassi cron spiegata
Ciascuno dei cinque campi accetta valori specifici e caratteri speciali. Un asterisco (*) significa "ogni valore possibile". Un numero imposta un valore specifico. Un trattino (1-5) definisce un intervallo. Una virgola (1,3,5) crea un elenco. Una barra (*/5) imposta un intervallo di passo. Combinando questi operatori è possibile costruire praticamente qualsiasi pianificazione.
Riferimento ai campi
- Minuto (0–59): Il minuto dell'ora in cui viene eseguito il lavoro.
- Ora (0–23): L'ora del giorno in formato 24 ore. 0 è mezzanotte, 12 è mezzogiorno.
- Giorno del mese (1–31): Il giorno del calendario. Non ogni mese ha 31 giorni — cron salta automaticamente le date non valide.
- Mese (1–12): Il mese del calendario. 1 è gennaio, 12 è dicembre.
- Giorno della settimana (0–6): Il giorno feriale. 0 è domenica, 6 è sabato. Alcuni sistemi accettano anche 7 per domenica.
Espressioni cron comuni
0 0 * * *— 0 0 * * * — Ogni giorno a mezzanotte.0 9 * * 1-5— 0 9 * * 1-5 — Nei giorni feriali alle 9:00.0 0 1 * *— 0 0 1 * * — Il primo giorno di ogni mese a mezzanotte.*/15 * * * *— */15 * * * * — Ogni 15 minuti.0 */4 * * *— 0 */4 * * * — Ogni 4 ore all'ora esatta.
Errori comuni con cron
L'errore più frequente è mettere i campi nell'ordine sbagliato. Cron legge sempre prima il minuto, poi l'ora — quindi "0 9" significa le 9:00, non il minuto 9. Un'altra insidia è dimenticare che il fuso orario del server determina quando cron viene eseguito. Se il server è in UTC ma ci si aspetta l'orario locale, i lavori si attiveranno all'ora sbagliata.
Evitare di pianificare lavori pesanti in termini di risorse esattamente a mezzanotte (0 0 * * *) perché molti altri lavori cron vengono eseguiti nello stesso momento. Distribuire i lavori di qualche minuto per evitare picchi di carico. Fare attenzione anche ai lavori che impiegano più tempo del loro intervallo — se un lavoro viene eseguito ogni minuto ma impiega 3 minuti, si avranno istanze sovrapposte.
Best practice
Reindirizzare sempre l'output di cron in un file di log (>> /var/log/myjob.log 2>&1) per poter risolvere i problemi. Usare percorsi assoluti per comandi e script perché cron viene eseguito con un ambiente PATH minimale. Testare l'espressione con uno strumento come questo prima di distribuirla in produzione.
Per esigenze di pianificazione complesse, considerare alternative a cron come i timer systemd (Linux), Celery Beat (Python) o pianificatori cloud (AWS EventBridge, Google Cloud Scheduler). Questi offrono funzionalità come la logica di retry, dashboard di monitoraggio ed esecuzione distribuita che il cron standard non ha.
Domande frequenti
Cron può eseguire un lavoro ogni 30 secondi?
No. La risoluzione minima di cron è un minuto. Per eseguire un'attività ogni 30 secondi, pianificarla ogni minuto e aggiungere un sleep di 30 secondi prima di una seconda esecuzione nello stesso script. In alternativa, usare un timer systemd o uno scheduler specifico del linguaggio per intervalli inferiori al minuto.
Dove si trova il file crontab?
I crontab degli utenti sono memorizzati in /var/spool/cron/ (Red Hat/CentOS) o /var/spool/cron/crontabs/ (Debian/Ubuntu). Modificare il proprio con "crontab -e" invece di modificare i file direttamente. Il crontab di sistema si trova in /etc/crontab e ulteriori lavori possono essere inseriti in /etc/cron.d/.