Table of Contents
Nei sistemi operativi Unix e Unix-like, il comando cron consente la pianificazione di comandi, ovvero la registrazione di questi presso il sistema per essere poi mandati in esecuzione periodicamente in maniera automatica dal sistema stesso.
Per far questo viene utilizzato un demone, chiamato crond, che in quanto tale è costantemente in esecuzione in background e, una volta al minuto, legge i contenuti del registro dei comandi pianificati (crontab) ed esegue quelli per cui si è esaurito il periodo di attesa. Un comando mandato in esecuzione da crontab viene chiamato cronjob.
Struttura del Crontab
Ogni utente su un sistema Unix/Linux può creare e gestire il proprio file crontab, che elenca tutti i cronjob di quell'utente. Per modificare il proprio crontab si utilizza il comando:
1 2 |
crontab -e |
Per visualizzare i cronjob esistenti:
1 2 |
crontab -l |
Per rimuovere tutti i cronjob dell'utente corrente:
1 2 |
crontab -r |
Sintassi
La sintassi di un comando cron si divide in due sottogruppi:
- Sequenza di cinque campi che rappresentano rispettivamente:
- Minuti (0-59)
- Ore (0-23)
- Giorno del mese (1-31)
- Mese (1-12)
- Giorno della settimana (0-6, dove 0 corrisponde a domenica)
- Il comando da eseguire, che va immesso nella stessa forma con cui si eseguirebbe da terminale.
Ad esempio:
1 2 |
30 2 * * 1 /home/user/script.sh |
Questo cronjob eseguirà lo script script.sh
ogni lunedì alle 2:30 di notte.
Un metodo utile per testare e verificare la sintassi è utilizzare il sito web Crontab Guru, che offre un'interfaccia intuitiva per interpretare e generare espressioni cron.
Esempi Comuni di CronJob
Ecco alcune configurazioni comuni:
- Esecuzione ogni minuto:
12* * * * * /home/user/script.sh - Esecuzione ogni ora:
120 * * * * /home/user/script.sh - Esecuzione ogni giorno alle 3:00 del mattino:
120 3 * * * /home/user/script.sh - Esecuzione ogni primo giorno del mese alle 12:00:
120 12 1 * * /home/user/script.sh - Esecuzione ogni domenica alle 22:00:
120 22 * * 0 /home/user/script.sh
Debugging e Log dei CronJob
Per verificare che un cronjob sia stato eseguito correttamente, è possibile controllare i log di sistema:
1 2 |
cat /var/log/syslog | grep CRON |
Oppure, per verificare gli errori specifici dei cronjob di un utente:
1 2 |
grep CRON /var/log/syslog | grep "username" |
Se un cronjob non viene eseguito come previsto, assicurarsi di:
- Controllare i permessi del file che deve essere eseguito (
chmod +x script.sh
). - Utilizzare il percorso assoluto nei comandi (
/usr/bin/python3 /home/user/script.py
anzichépython3 script.py
). - Redirigere l'output su file per verificare eventuali errori:
12* * * * * /home/user/script.sh >> /home/user/cron.log 2>&1
Conclusione
Il comando cron è uno strumento essenziale per l'automazione delle operazioni su sistemi Unix/Linux. Con una corretta configurazione e una buona conoscenza della sintassi, è possibile gestire con facilità l'esecuzione periodica di comandi e script, ottimizzando così i processi di amministrazione e manutenzione di un server.