9.4. Automatizzare i compiti con cron e i file crontab

Come molti utenti Linux, potreste trovare necessario programmare, ogni certo periodo di tempo, di eseguire dei compiti ripetitivi. Potrebbe essere necessario eseguire tali compiti molto frequentemente, tipo una volta ogni minuto, oppure più di rado, tipo un volta all'anno. Questa programmazione può essere fatta usando le facilitazione di "cron".

Quelle in Linux sono abbastanza simili a quelli disponibile per altre implementazioni di Unix. Comunque, Red Hat ha adottato un sistema di pianificazione di compiti che è leggermente differente da quelli di altre distribuzioni Linux. Come il altre distribuzioni, le informazioni sono contenute nel file di sistema "crontab" (che si trova nella directory "/etc/"), con il seguente formato:

minute hour day month year command

Potete specificare ogni componente temporale come un numero intero (es. da 1 a 12 per i mesi), oppure inserire per uno o più componenti il carattere "*" che sarà interpretato come una wildcard (cioè, "*" nel mese significa che il comando si attiverà ad un dato giorno e ad una data ora di ogni mese). Vediamo qualche esempio:

# Mail the system logs at 4:30pm every June 15th.
30 16 15 06 * for x in /var/log/*; do cat ${x} | mail postmaster; done

# Inform the administrator, at midnight, of the changing seasons.
00 00 20 04 * echo 'Woohoo, spring is here!'
00 00 20 06 * echo 'Yeah, summer has arrived, time to hit the beach!'
00 00 20 10 * echo 'Fall has arrived.  Get those jackets out.  :-('
00 00 20 12 * echo 'Time for 5 months of misery.  ;-('

Notate come i comandi che forniscono output in maniera standard (cioè, a terminale) come, nell'esempio, "echo", invieranno il loro output all'account di "root". Se volete evitarlo, fate in questo modo:

00 06 * * * echo 'I bug the system administrator daily at 6:00am!' >/dev/null

Oltre a "crontab", Red Hat aggiunge alcune directory:

/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.weekly/

Come suggerisce il nome, i file eseguibili possono essere messi in una di queste directory, per poi essere eseguiti a cadenza oraria, giornaliera o settimanale. Ciò permette di risparmiare un po' di tempo. Mettete lo script o il programma (o un link simbolico ad una memorizzato da qualche altra parte) nella directory appropriate e dimenticatevi di esso.