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 è 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 28.2. Per pianificare operazioni da eseguire una sola volta, consultate la Sezione 28.3.
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.
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 (può essere 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 28-1.
# 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 |
Esempio 28-1. Esempi di crontab
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.
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.
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 14.