La guida per principianti all'uso di Cron in Linux

Cron è un’utilità UNIX semplice che gestisce e programma l’esecuzione di comandi sul tuo computer. È stata sviluppata per la prima volta nel 1987 da Paul Vixie ed è diventata un strumento inestimabile nei sistemi operativi basati su Linux sia per gli amministratori che per gli utenti.
Oggigiorno, ci sono diverse implementazioni e riscritture di cron che puoi facilmente installare sul tuo sistema Linux. Nonostante le differenze, questi programmi condividono tutti la stessa eredità di Vixie Cron.
Pertanto, questo articolo mira a fornire una panoramica di base su come funziona il cron originale di Vixie, la sua sintassi e come puoi utilizzarlo per programmare attività nel tuo sistema Linux.
Indice degli argomenti
- Come funziona Cron?
- Crontab: Il cuore di Cron
- Crontab di sistema
- Revisione dell’attività di cron
- Domande frequenti
Leggi anche: Come creare facilmente lavori Cron in Linux con Zeit
Come funziona Cron?
Cron è un’utilità UNIX incredibilmente semplice. Funziona in due parti. Cron prima viene eseguito come processo in background che inizia quando accendi per la prima volta il tuo sistema.
Da lì, legge un file specifico ogni minuto. Questo file contiene un elenco di comandi che, a loro volta, consiste di un codice temporale e un percorso di file per ciascuno script o programma che desideri eseguire.

Questo approccio consente a cron di essere altamente flessibile nei grandi sistemi. Ad esempio, le moderne implementazioni di cron come Cronie eseguono solo un’istanza di cron anche se quella macchina ospita più utenti.

Cronie rende questo possibile fornendo crontab locali per ciascun utente installato nel sistema. Pertanto, cron deve solo sapere chi possiede il crontab, il livello di permesso di quell’utente e i comandi all’interno del crontab.
Questo non solo rende il sistema più efficiente, ma anche più sicuro riducendo il numero di programmi con privilegi in esecuzione in memoria.
Crontab: Il cuore di Cron
Ogni implementazione di cron utilizza una forma di crontab. Questo è un semplice file di testo che contiene tutti i comandi che cron eseguirà per quell’utente particolare. Come descritto sopra, ogni utente nel sistema ha il proprio crontab. Può visualizzarlo eseguendo il seguente comando:
crontab -l
Questo stamperà il contenuto del crontab dell’utente corrente sull’output standard. Questo può essere incredibilmente utile se desideri rapidamente vedere quali comandi cron sta eseguendo per quell’utente.
Per modificarlo, dovrai eseguire il comando:
crontab -eQuesto dirà a cron di eseguire il tuo editor di testo predefinito e caricare il file crontab al suo interno. Farlo ti permetterà di modificare il file crontab.

Leggi anche: Come utilizzare i timer di Systemd come sostituto di Cron
La sintassi del Crontab
La sintassi del file crontab è incredibilmente semplice. Una singola riga in questo file indicherà un comando corrispondente che deve essere eseguito per quell’utente particolare. La forma generale di un comando crontab appare in questo modo:
m h d mon dow [flags]commandL’intervallo di tempo è un campo di cinque cifre in cui puoi indicare a cron quanto spesso desideri eseguire un comando. Questa è la caratteristica principale di qualsiasi implementazione di cron e ti consente di essere sia specifico che flessibile con il modo in cui cron gestisce i compiti ricorrenti.
- m = minuto tra 0 e 59
- h = ora tra 0 e 23
- d = giorno del mese tra 1 e 31
- mon = mese tra 1 e 12
- dow = giorno della settimana tra 0 e 6. Zero è Domenica.
Il campo flags è un insieme di opzioni che modificano il comportamento di cron per un singolo comando. Ad esempio, puoi includere l’opzione -n per fermare cron dall’inviare la posta di sistema.
Il campo command è il comando che cron eseguirà a intervalli impostati. Questo può essere uno script shell che hai scritto o un percorso di programma con le opzioni.

Sapendo ciò, puoi utilizzare tutti questi insieme in una sola riga crontab per creare intervalli di tempo specifici per i tuoi compiti. Ad esempio, posso eseguire uno script sul mio sistema Ubuntu ogni 24 luglio alle 2:30 AM scrivendo la seguente riga crontab:
302247*/home/$USER/myscript.sh
Nota: Si consiglia di eseguire un cronjob a “numeri” di minuti “atipici” (11, 27, 34, ecc.) per evitare che diversi cron jobs si sovrappongano tra loro.
Codici brevi
Crontab ti consente di utilizzare alcuni codici brevi per rendere le tue voci cron più facili da leggere.
@reboot– Esegui una volta, all’avvio@yearly– Esegui una volta all’anno, “0 0 1 1 *”.@annually– stesso di @yearly@monthly– Esegui una volta al mese, “0 0 1 ”@weekly– Esegui una volta alla settimana, “0 0 0”@daily– Esegui una volta al giorno, “0 0 *”@midnight– stesso di @daily@hourly– Esegui una volta all’ora, “0 ”
Ad esempio:
@daily ramces /home/ramces/.scripts/file-backup.shIl codice breve @reboot ti consente di creare script da eseguire all’avvio:
@reboot /home/ramces/.scripts/bootup.shQuesto può essere incredibilmente utile se desideri creare un modo per assicurarti che i comandi vengano eseguiti non appena accendi la macchina.
Nota: A seconda della configurazione del tuo sistema, il codice breve @reboot potrebbe o meno funzionare come previsto nel tuo sistema.
Crontab di sistema
Un’altra brillante funzionalità di cron è che può gestire compiti ricorrenti a livello di sistema, in quanto puoi anche creare file crontab per l’utente root. Questo può essere incredibilmente utile se desideri automatizzare la manutenzione e gli aggiornamenti del sistema.
Per creare un crontab di root, devi semplicemente utilizzare sudo con il comando, o accedere al tuo account root:
sudo crontab -e
Il crontab di sistema segue in gran parte lo stesso formato del crontab dell’utente. Tuttavia, una differenza principale tra i due è che il crontab di root ti consente di eseguire comandi come qualsiasi utente nel sistema:
m h d mon dow user [flags]"command"Sapendo ciò, puoi quindi utilizzare questo per creare comandi ricorrenti sia a livello utente che a livello root all’interno dello stesso crontab:
302 sun root /bin/apt update
305* ramces /home/ramces/.scripts/file-backup.shFaradolo in questo modo mi consente di preservare i permessi dei miei file mentre ho anche un unico posto dove posso modificare i comandi che desidero eseguire.

Leggi anche: Perché e come modificare il tuo file sudoers in Linux
Modificare le voci cron come un altro utente
Se invece di modificare il crontab come utente root, desideri pianificare un lavoro cron come un altro utente, è anche possibile con il flag -u.
sudo crontab -u username -eAd esempio, per eseguire un lavoro cron come utente “www-data”, usa il seguente comando:
sudo crontab -u www-data -eLeggi anche: Come salvare l’output del terminale in un file in Linux
Revisione dell’attività di cron
Anche se ora sei pronto per eseguire comandi o script specifici, potresti voler assicurarti che siano stati eseguiti. Integra in cron il fatto che una volta eseguito un comando, invierà un’email al proprietario di cron. Questo può essere cambiato con la variabile “MAILTO”.

Aggiungere [email protected] invierà tutti i report dei lavori cron a un’email specificata. Questa variabile si trova generalmente in cima all’editor di crontab. Tuttavia, se non è presente, puoi aggiungere la variabile e funzionerà come previsto.
Indirizzi email multipli possono essere separati da una virgola. Se hai bisogno di un comando diverso inviato altrove, puoi aggiungere il comando MAILTO direttamente sopra il comando. I comandi dopo quel mailto saranno inviati al nuovo indirizzo. Se lasci MAILTO= vuoto, le notifiche saranno inviate al proprietario dell’entrata cron.
Se non desideri ricevere alcuna email, puoi anche controllare i log di cron. Nella maggior parte dei sistemi, l’accesso ai log di cron richiederà permessi di superutente. Il log di cron può essere trovato sotto “/var/log.” Il file cron o syslog mostrerà il log delle voci cron eseguite.
sudogrep crontab syslogDomande frequenti
Perché il mio comando cron viene eseguito ogni minuto invece che una volta all’ora?
Questa è una delle più comuni trappole quando si gestiscono i crontab. Per impostazione predefinita, aggiungere un valore asterisco in un codice temporale significa che verrà eseguito per ogni istanza possibile per quel valore. Ad esempio, un valore di 0 12 * * * dirà a cron che desideri eseguire un comando una volta al giorno alle 12:00.
Tuttavia, la maggior parte dei principianti scrive spesso lo stesso codice temporale come * 12 * * *. Scriverlo in questo modo significherà che il comando verrà eseguito una volta al minuto dalle 12:00 alle 12:59. Pertanto, è buona prassi scrivere 0 nel campo dei minuti per assicurarti che il comando venga eseguito una sola volta.
Ci sono altre opzioni che posso utilizzare con cron?
Oltre alle variabili -n e MAILTO, puoi anche usare il comando -s per dire al programma di essere severo con l’esecuzione dei comandi. Usare questa opzione costringerà cron a concentrarsi solo sul comando corrente fino a quando non è completato. Questo può essere incredibilmente utile se la tua macchina utilizza un insieme di comandi che devono essere eseguiti in un ordine specifico.
Puoi anche usare la variabile SHELL per fare in modo che cron utilizzi una shell diversa per i suoi comandi. Ad esempio: SHELL=/bin/ksh