Cos’è Cron?

Cron è un demone usato in ambiente Linux per programmare azioni che verranno eseguite in un momento prescelto. Le informazioni necessarie a programmare l’azione (tempo ed azione definita) sono indicate nel file crontab. Ogni utente può avere il suo file per crontab, inoltre anche il sistema ha il suo file per crontab (/etc/crontab), che permette la programmazione di azioni sui log, l’aggiornamento periodico dei database, etc…

Usare Cron

Creare il proprio crontab

Come abbiamo visto, il sistema ha un suo file di cron (/etc/crontab), ma ogni utente può creare il proprio (anche su sistemi monoutente è una scelta consigliabile !). Per creare un file di cron, digitare da terminale:

nomeutente@nomesistema:~$ crontab -e

Nota – il comando deve essere eseguito dall’utente per il quale il file viene creato, per maggiori informazioni sulla sintassi di crontab nel terminale, digitate solo “crontab” oppure “man crontab”.

Il comando che abbiamo inserito apre un editor di testo predefinito con un documento vuoto (di solito Nano), è sufficiente scrivere i comandi necessari (vedi in seguito) e salvare il file con il nome e la collocazione che vengono suggeriti dall’editor (di solito in /tmp). Se la sintassi dei comandi non è corretta, il sistema non riconosce il file, quindi restituisce un messaggio di errore e non utilizza quel crontab. Per vedere se il sistema ha salvato correttamente il file cron, digitare:

crontab -l

che restituirà l’elenco dei cron registrati per l’utente attivo, in assenza di cron validi, restituirà:

no crontab for nomeutente

 

Contenuto del crontab – sintassi

Il file crontab deve rispettare una sintassi ben precisa, diversamente il sistema non accetterà le impostazioni. Questo è un esempio tipico di sintassi di crontab:

5 3 * * * /usr/bin/apt-get update

L’esempio precedente eseguirà /usr/bin/apt-get update ogni giorno di ogni mese alle 03:05 (cron utilizza un tempo indicato sul sistema di 24 ore).

La prima parte della voce descrive quando l’azione deve essere effettuata. Ci sono cinque campi (“5 3 * * *”), separati da uno spazio, ognuno dei quali accetta un numero, un asterisco (*), o un testo appropriato. I campi specificano, in ordine (tra parentesi l’abbreviazione standard):

·         minuto 0-59 (m),

·         ora 0-23 (h),

·         giorno del mese 1-31 (dom),

·         mese 1_12 (mon),

·         giorno della settimana 0-6 (n.b. la domenica è 0)(dow).

Il campo del mese e quello del giorno della settimana permettono di usare un’abbreviazione, come ad esempio “jan” per Gennaio (January) o “thu” per Giovedì (Thursday). Per esempio, questo è il contenuto di un tipico crontab di sistema:

m h dom mon dow user    command

17 *    * * *   root    run-parts –report /etc/cron.hourly

25 6    * * *   root    test -x /usr/sbin/anacron || run-parts –report /etc/cron.daily

47 6    * * 7   root    test -x /usr/sbin/anacron || run-parts –report /etc/cron.weekly

52 6    1 * *   root    test -x /usr/sbin/anacron || run-parts –report /etc/cron.monthly

Nota anche che l’asterisco (*), chiamato WILDCARD, che consente di non specificare alcun valore per il campo in oggetto.

 

Ecco altri esempi che chiariscono l’uso della sintassi:

12 03 * * 1,4 /percorso/assoluto/per/la/webroot/cgibin/script.cgi

12: minuti [0-59] 03: ore [0-23] *: giorno del mese [1-31] *: mese [1-12] 1,4: giorno della settimana [0-6, con la domenica indicata da 0] /script.cgi: comando [lo script da eseguire] Traduzione: alle 3:12a.m., orario del server, ogni lunedì e giovedì, lo script script.cgi verrà eseguito.

Alcune variazioni sul tema

·         tutte le mattine, più o meno alle 3?> 12 03 * * *

·         tutti i 15 del mese, alla stessa ora?> 12 03 15 * *

·         7 volte l’anno, alla stessa ora?> 12 03 31 * * [solo 7 mesi hanno 31 giorni]

·         ogni domenica, a mezzogiorno?> 0 12 * * 0

·         ogni giorno, più o meno a mezzanotte?> 2 0 * * *

·         ogni lunedì e venerdì, alle 3 del mattino circa?> 02 03 * * 1,5

Puoi fare in modo che cron ti annoi ogni 5 minuti durante il tuo turno di lavoro (9 di mattina – 5 di pomeriggio) con un messaggio:

*/5 9-17 * * mon,tue,wed,thur,fri wall “Siamo ancora qui?”

o ricordarti un compleanno alle 9 di mattina il 10 gennaio ogni anno:

0 9 10 jan * echo “E’ il compleanno di tua madre oggi!” > ~/readme

 

Gestione dei crontabs

Naturalmente è possibile vedere quali crontab sono in esecuzione sul sistema, è sufficiente usare il comando:

crontab -l

 

Modifica dei crontabs

Per modificare il file, digitare di nuovo:

crontab -e

Quando chiuderai l’editor, il nuovo file di crontab sarà installato. Il file è mantenuto in/var/spool/cron/crontabs ma deve essere modificato solo per mezzo del comando di crontab.

 

Crontab per comandi root

I comandi precedenti sono memorizzati in un file di crontab e verranno eseguiti con il livello di permessi dell’utente a cui appartiene. Se vuoi lanciare un comando regolarmente che richiede un livello più alto di permessi, imposta un file di crontab per root usando:

sudo crontab -e

A seconda dei comandi che dovrai utilizzare, potresti avere bisogno di modificare la variabile PATH inserendo la seguente linea all’inizio del file di crontab dell’utente:

PATH=/usr/sbin:/usr/bin:/sbin:/bin

 

Crontab per eseguire backup di dati

Uno degli utilizzi più frequenti, ed utili, del comando cron riguardano l’esecuzione periodica del backup dei dati. In questo esempio cron eseguirà un backup giornaliero, alle ore 19:30, della cartella “documenti”, e delle sue sottocartelle, creando un file di archivio dal nome “backup_utente.tgz”.

30 19 * * * tar -cvpzf /backup_utente.tgz /home/utente/documenti

Questo è solo un esempio delle potenzialità di questo comando. Per maggiori informazioni sul backup dei dati con tar consulta la guida al backup dei dati con tar.

 

Considerazioni finali

E’ sensato voler testare se tutto funziona come voluto. Un metodo per farlo è impostare un’azione da eseguire un paio di minuti dopo la modifica del file di crontab e vedere il risultato. Puoi anche trovare utile mettere il comando in un file che terrà traccia del successo o del fallimento dell’esecuzione:

echo “Backup riuscito: $(date)” >> /tmp/mybackup.log

Per maggiori informazioni, utilizza man per cron e crontab. Potrebbe anche esserti utile il comando at (che è parte dell’installazione base di Ubuntu) ed anacron (che si trova nel repository Universe) che fornisce un approccio diverso per azioni programmate.

 

Potrebbero interessarti anche...

Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.