Come tutti i sistemi operativi, Linux ha un proprio metodo per eseguire qualsiasi processo ad una determinata ora e per programmarne l’esecuzione ricorrente, in particolare ciò è possibile grazie al demone cron. Questo demone, ogni minuto controlla i file “crontab” presenti sul sistema, poiché non esiste solamente il file /etc/crontab di sistema, ma ogni utente ha la possibilità di definire il proprio file crontab; per definire un file crontab per l’utente corrente, digitare il comando

$ crontab -e

che aprirà un file di testo con nano pronto per essere editato a seconda dei processi che vorremo schedulare. Per controllare la programmazione di cron relativa al proprio utente, digitare il comando

$ crontab -l

e digitare di nuovo il comando

$ crontab -e

se si vuole modificare ulteriormente il proprio crontab.

Invece, come detto, se si vuole modificare la schedulazione “generale” del sistema, bisogna modificare il file /etc/crontab, di cui di seguito è riportato il contenuto predefinito presente su Ubuntu Server 6.10:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 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

#
I primi cinque valori indicano quando (od ogni quanto) i processi verranno eseguiti, in particolare, leggendo da sinistra verso destra, abbiamo:

valore m, rappresenta il minuto dell’orario impostato;

valore h, rappresenta l’ora dell’orario impostato;

valore dom, rappresenta il giorno del mese (da 1 a 31)

valore mon, rappresenta il mese dell’anno (da 1 a 12)

valore dow, rappresenta il giorno della settimana (da 0 a 6, cioè da domenica a sabato)

Un tipico utilizzo di cron riguarda la procedura di backup dei dati, oppure, come in questo caso, l’aggiornamento periodico di un sistema Ubuntu tramite apt. Ad esempio, andiamo ad impostare l’aggiornamento di Ubuntu il primo di ogni mese alle ore 21. La riga corrispondente da aggiungere  al file /etc/crontab è la seguente:

0 21   1 * *   root    apt-get update && apt-get -y upgrade > /tmp/logcron.txt

Da notare l’opzione -y applicata al comando apt-get upgrade, che permette il download e l’installazione dei pacchetti di aggiornamento senza che compaiano richieste di conferma che di fatto impedirebbero l’esecuzione dell’istruzione, poiché il processo schedulato gira in background e non è possibile interagire con esso. La successiva istruzione > /tmp/logcron.txt permette di salvare l’output del comando nel file /tmp/logcron.txt cancellando tutto il contenuto del file di log, se si vuole fare aggiungere del contenuto al file di log invece di sovrascriverlo, utilizzare il simbolo >> al posto del simbolo >.

Sul sistema Ubuntu che ho utilizzato, ho abilitato l’utente root, non so se non abilitandolo la linea in crontab appena descritta porti all’esecuzione del processo. Inoltre, per questa che è essenzialmente una prova, ho messo il log nella cartella /tmp, magari se la schedulazione è sistematica, potrebbe essere utile mettere il file di log in un’altra cartella.