Capitolo 27. Operazioni pianificate

Su Linux, � possibile configurare il sistema affinch� alcune operazioni vengano eseguite in modo automatico entro un determinato periodo di tempo o in giorni stabiliti. Red Hat Linux � gi� preconfigurato per l'esecuzione di alcune operazioni di aggiornamento del sistema. Per esempio, il database slocate viene aggiornato quotidianamente tramite il comando locate. Un amministratore di sistema pu� utilizzare le operazioni pianificate per eseguire backup periodici, controllare il sistema, eseguire script personalizzati e altro.

Red Hat Linux � fornito con quattro utility per l'esecuzione automatica di operazioni: cron, anacron, at e batch.

Cron

Cron � un demone che pu� essere utilizzato per eseguire operazioni pianificate in base all'ora, al giorno del mese, al mese, al giorno della settimana e alla settimana.

Cron presuppone che il sistema sia sempre acceso. In caso contrario, quando � pianificata un'operazione, questa non viene eseguita. Per configurare le operazioni in base ai periodi anzich� all'ora esatta, consultate la sezione Anacron. Per pianificare operazioni da eseguire una sola volta, consultate la sezione At e batch.

Per usufruire dei servizi di cron, � necessario installare il pacchetto RPM vixie-cron e il servizio crond deve essere in esecuzione. Per stabilire se il pacchetto � gi� installato, digitate il comando rpm -q vixie-cron. Per determinare se il servizio � in esecuzione, digitate il comando /sbin/service crond status.

Come configurare le operazioni con Cron

Il file di configurazione pi� importante di cron, /etc/crontab, contiene le righe seguenti:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Le prime quattro righe sono variabili utilizzate per configurare l'ambiente in cui vengono eseguite le operazioni di cron. Il valore della variabile SHELL indica al sistema quale ambiente shell utilizzare (bash shell, nell'esempio) e la variabile PATH definisce il percorso utilizzato per eseguire i comandi. L'output delle operazioni cron viene inviato tramite e-mail al nome utente definito con la variabile MAILTO Se in questa variabile non viene specificato nulla (MAILTO o viene definita come stringa vuota (MAILTO=""), non verr� inviata alcuna e-mail. La variabile HOME pu� essere utilizzata per impostare la directory home per l'esecuzione di comandi o script.

Ogni riga nel file /etc/crontab rappresenta un'operazione e ha il formato seguente:

minute   hour   day   month   dayofweek   command

  • minute — qualsiasi numero intero da 0 a 59;

  • hour — qualsiasi numero intero da 0 a 23;

  • day — qualsiasi numero intero da 1 a 31 (deve essere un giorno valido per il mese specificato);

  • month — qualsiasi numero intero da 1 a 12 (o abbreviazione del nome del mese, come gen, feb e cos� via);

  • dayofweek — qualsiasi numero intero da 0 a 7 in cui 0 o 7 rappresenta la domenica (oppure l'abbreviazione del giorno come dom, lun e cos� via);

  • command — � il comando da eseguire e pu� essere o un comando come ls /proc >> /tmp/proc oppure un comando scritto da voi per eseguire uno script.

Per qualsiasi valore tra quelli sopra descritti, pu� essere utilizzato un asterisco (*) che rappresenta tutti i valori validi. Per esempio, un asterisco per il valore del mese indica di eseguire il comando ogni mese in base alle restrizioni degli altri valori.

Un trattino (-) tra numeri interi specifica un intervallo di numeri interi. Per esempio 1-4 indica un intervallo che comprende i numeri interi 1, 2, 3 e 4.

Una serie di valori separati da virgole (,) determina un elenco. Per esempio 3, 4, 6, 8 indica questi quattro numeri interi.

La barra (/) pu� essere usata per specificare valori che devono essere ignorati. Per omettere un numero entro un intervallo � necessario aggiungerlo alla fine dell'intervallo in questo modo: /<numero>. Per esempio 0-59/2 pu� essere usato per definire ogni minuto nel campo dei minuti. I valori da omettere possono essere usati anche con un asterisco. Per esempio, il valore */3 pu� essere usato nel campo dei mesi per eseguire l'operazione ogni tre mesi.

Le righe che iniziano con un carattere cancelletto (#) sono considerate commenti e, pertanto, non vengono elaborate.

Come potete notare, il file /etc/crontab, utilizza lo script run-parts per eseguire gli script nelle directory /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly, rispettivamente su base oraria, giornaliera, settimanale o mensile. I file in queste directory dovrebbero essere script della shell.

Se un'operazione di cron deve essere eseguita con una programmazione diversa da quella oraria, giornaliera, settimanale o mensile, potete aggiungerla nella directory /etc/cron.d. Tutti i file in questa directory utilizzano la stessa sintassi di /etc/crontab. Per ulteriori esempi, consultate Esempio 27-1.

Esempio 27-1. Esempi di crontab

# record the memory usage of the system every monday 
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh

Gli utenti diversi da root possono configurare le operazioni di cron usando l'utility crontab. Tutti i crontab definiti dall'utente vengono salvati nella directory /var/spool/cron ed eseguiti usando il nome utente di chi li ha creati. Per creare un crontab con un determinato utente, connettetevi al sistema con il nome di questo utente e digitate il comando crontab -e per modificare il crontab utilizzando l'editor specificato nella variabile d'ambiente VISUAL o EDITOR. Il file utilizza lo stesso formato di /etc/crontab. Una volta salvate le modifiche al crontab, questo viene salvato in base al nome dell'utente e scritto nel file /var/spool/cron/nomeutente.

Il demone cron controlla il file etc/crontab, la directory /etc/cron.d/ e la directory /var/spool/cron ogni minuto per rilevare eventuali modifiche. Se vengono rilevate delle modifiche, il file e le directory vengono ricaricati in memoria. Tuttavia, se un file crontab viene modificato, non � necessario riavviare il demone cron.

Controllo dell'accesso al Cron

I file /etc/cron.allow e /etc/cron.deny consentono di limitare l'accesso a cron. Il formato di entrambi i file � costituito da un nome utente su ciascuna riga. Non possono essere lasciati spazi vuoti. Il demone cron (crond) non deve essere riavviato se i file di controllo dell'accesso vengono modificati. Questi file sono letti ogni volta che un utente cerca di aggiungere o eliminare un'operazione cron.

L'utente root pu� sempre usare cron, indipendentemente dai nomi degli utenti elencati nei file di controllo dell'accesso.

Se il file cron.allow esiste, solo gli utenti qui elencati possono usare cron e il file cron.deny viene ignorato.

Se cron.allow non esiste, tutti gli utenti elencati nel file cron.deny non sono autorizzati a usare cron.

Avvio e interruzione del servizio

Per avviare il servizio cron utilizzate il comando /sbin/service crond start, per interromperlo, utilizzate invece il comando /sbin/service crond stop. Si raccomanda di eseguire il servizio al momento dell'avvio. Per maggiori dettagli sull'esecuzione automatica del servizio cron all'avvio, consultate il Capitolo 13.