Alcuni processi devono
essere eseguiti a determinati orari, un determinato numero di
volte. Esempi di questi possono essere i processi di backup
che vengono lanciati ogni notte, oppure un analizzatore di log
che deve girare ogni minuto.
Questi processi devono girare un certo numero di volte oppure
in determinati giorni; il resto del tempo essi stanno fermi
fino a quando un utente non interagisce con essi e li richiama
(con gli appositi comandi). Qui è dove il CRON si rende
utile. Vi permette di programmare (o "schedulare",
come si dice in gergo) l'esecuzione di un lavoro in qualsiasi
momento desideriate, ogni minuto, ogni ora, giornalmente,
mensilmente.
E' un sollievo sapere che ci sono vari programmi che stanno
girando senza alcun bisogno della vostra supervisione.
Le Basi
Cron può essere fatto partire da rc
o da rc.local e ritorna
immediatamente al prompt, sicchè non c'é bisogno di
lanciarlo in background. Cron ricerca il file /etc/crontab
per le voci (le cosiddette "entry") di sistema e /var/spool/cron
per le voci relative agli utenti che si trovano nel file /etc/passwd.
Tutte le voci ritrovate sono caricate in memoria.
Tutto ciò viene ripetuto ogni minuto appena cron "si
sveglia" ed esegue diversi compiti:
a) ricerca le voci ed esegue i programmi che sono stati
schedulati.
b) determina se il modtime (vale a dire la data e l'ora
dell'ultima modifica) nella directory di cron è cambiato c)
se il modtime nella directory cron è cambiato, cron ricerca
tutti i file e ricarica i programmi che sono stati modificati.
Poiché cron cerca le modifiche ogni minuto, non è necessario
farlo ripartire quando sono stati effettuati dei cambiamenti
(editati) nei file nella directory cron.
Utilizzare crontab
Il "cron daemon" legge il file "crontab";
ogni utente può avere la propria versione di questo file,
orientata agli specifici compiti che si vogliono eseguire. I
flag associati con le applicazioni crontab specificano quando
aprire crontab per avere la lista o per rimuovere e modificare
compiti.
La sintassi per il programma crontab è la seguente:
crontab [-u user] file
crontab [-u user] -l -e -r
Questi parametri indicano: -u
questa opzione comunica al sistema il nome dell'utente che
"possiede" il file. Se l'opzione -u
è omessa, il sistema deduce per default che state usando il
vostro crontab personale.
Il comando switch user (su) può confondere il crontab, così
se siete nello switch "su" assicuratevi di
utilizzare l'opzione -u.
-l questa opzione dice a crontab
di elencare i file nello standard output, in poche parole
visualizza il file.
-e questa opzione dice a crontab
di editare il file. Cron usa l'editor definito dalla variabile
EDITOR o da VISUAL. Se nessuna di queste variabili è
definita, parte in automatico l'editor "vi". Quando
si esce dall'editor, è immediamente piazzato nella locazione
corretta e viene aggiornato il campo data/ora.
-r questa opzione rimuove il file
crontab specificato, se nessun file viene specificato, rimuove
il file crontab dell'utente.
--Voci in Crontab--
Solo 2 tipi di voci sono permesse nel crontab: i settaggi
ambientali (Crontab Environmental settings) e i settaggi di
comando (Crontab Command settings)
a) Crontab Environmental settings
I settaggi ambientali utilizzano la seguente forma:
nome = valore
Cron conosce già le diverse variabili ambientali. Per
esempio, SHELL è settato a /bin/bash.
Altre variabili ambientali, come LOGNAME e HOME, sono
associate al possessore del file. SHELL e HOME posso essere
sovrascritte nello script, mentre non è possibile farlo con
LOGNAME. Se MAILTO è definito (e non è settato a "
"), tale variabile è inserita in una riga nel file
crontab, e spedisce ogni messaggio generato all'utente
specificato in questo campo.
La seguente riga mostra MAILTO settato ad uno specifico utente
(luca): # spedisce tutti gli
output all'utente *luca* (non importa chi è il proprietario
di questo crontab)
MAILTO=luca
b) Crontab Command settings
I settaggi comandi usano un formato standard: ogni riga inizia
con cinque campi ora/data. Se è il crontab di sistema, il
campo successivo è lo username associato con la voce. Il
campo seguente sarà il comando da eseguire. Il comando verrà
eseguito solo quando la data e l'ora corrente coincideranno
con tutti i valori dei campi time/date del crontab. Nel
paragrafo succ. vi è un esempio.
I campi disponibili per la data e l'ora sono i seguenti:
Campi | Valori ammessi
----------------
minuti | 0-59
ore | 0-23
giorno | 1-31
mese | 1-12
giorno della settimana | 0-7 (0 & 7 indicano la
domenica)
Questi campi possono anche contenere un asterisco (*) invece
di un numero. Un asterisco indica che ogni possibile valore è
ammesso.
--Dettagli---
La righe seguenti mostrano il /etc/crontab
installato per default nella RedHat 6.2:
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
Avete notato come crontab chiama i quattro diversi eventi?
Il primo è associato ad eventi orari (eseguiti nel primo
minuto di ogni ora)
Il secondo è associato ad eventi giornalieri (eseguiti alle
ore 4:02 di ogni giorno)
Il terzo è associato ad eventi settimanali (eseguiti alle
4:22 di ogni domenica)
L'ultimo è associato ad eventi mensili (eseguiti alle 4:42
nel primo giorno di ogni mese).
Qualcosa da ricordare:
Il sistema non va indietro e raccoglie i lavori cron, esso li
esegue solo se la data e l'ora sono uguali alla voce nel file.
Ad esempio se il computer è spento quando dovrebbe essere
eseguito il cron, quel programma non viene più eseguito.
Permessi e divieti di accesso al servizio crontab
Ci sono due file che abilitano la root (solo la root dovrebbe
avere il permesso di editare o creare questi file) per
autorizzare o vietare l'utilizzo dei servizi crontab agli
utenti; essi sono: /etc/cron.allow
-- Questo file in genere non esiste, lo dovete creare. Ogni
voce che piazzerete in questo file coprirà quella inserita in
/etc/cron.deny. Se il file /etc/cron.allow
esiste, solo gli utenti specificati dentro posso usufruire del
servizio crontab.
/etc/cron.deny -- Questo file
esiste per default. In esso, ci metterete lo username delle
persone a cui vietate l'utilizzo del servizio crontab.
|