Utilizzo del servizio di scheduling Cron
Versioni compatibili
- Debian Sarge 3.0
- Debian Etch 4.0
- Debian Lenny 5.0
- Debian Squeeze 6.0
Introduzione al servizio di scheduling Cron
Alcuni processi devono essere eseguiti a determinati orari, un determinato numero di volte. Esempi 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). Questi sono i casi in cui il demone 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.
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/crontabs 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. Il demone Cron esegue diversi compiti:
- ricerca le voci ed esegue i programmi che sono stati schedulati.
- determina se il modtime (vale a dire la data e l'ora dell'ultima modifica) nella directory di cron è cambiato
- 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 nei file nella directory cron.
Utilizzare crontab
Il demone Cron 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
I parametri significano:
- -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. NOTA: 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, cioè di visualizzare 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 "nano". L'editor salva il file in /tmp; quando si esce dall'editor, il file è immediatamente 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)
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* MAILTO=luca
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. 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.
Ecco lo schema:
.---------------- [m]inute: minuto (0 - 59) | .------------- [h]our: ora (0 - 23) | | .---------- [d]ay [o]f [m]onth: giorno del mese (1 - 31) | | | .------- [mon]th: mese (1 - 12) OPPURE jan,feb,mar,apr... | | | | .---- [d]ay [o]f [w]eek: giorno della settimana (0 - 6) (domenica=0 or 7) OPPURE sun,mon,tue,wed,thu,fri,sat | | | | | * * * * * commando da eseguire
Esempio di Crontab
# Crontab Environmental settings SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # Crontab Command settings # m h dom m dow command 00 * * * * /comando/da/eseguire
Ogni comando, come si vede dal file di esempio, è rappresentato da una riga nel file crontab:
# m h dom m dow command 00 3 * * 0 /comando/da/eseguire
- Il primo valore rappresenta il minuto in cui eseguire il comando. Nel nostro caso il comando viene eseguito allo scoccare dell'ora (00)
- Il secondo valore rappresenta l'ora del giorno in cui eseguire il comando (Le 3 di notte)
- Il terzo valore rappresenta i giorni del mese in cui eseguire il comando (L'asterisco * corrisponde a tutti i giorni del mese. ' possibile anche indicare una sequenza di giorni. Ad esempio il valore 1-15 indica che il comando sarà eseguito nei primi 15 giorni del mese)
- Il quarto valore indica il mese in cui eseguire il comando (L'asterisco * corrisponde a tutti i mesi. ' possibile anche indicare una sequenza di mesi. Ad esempio il valore 1-4 indica che il comando sarà eseguito nei primi 4 mesi di ogni anno)
- Il quinto valore indica il giorno della settimana in cui eseguire il comando (I valori 0 e 7 rappresentano la domenica, 1 il lunedì e così via)
- L'ultimo valore rappresenta il percorso del comando da eseguire, con le sue eventuali opzioni
Note
Il sistema non va indietro nel tempo a raccogliere i lavori cron, ma li esegue solo se la data e l'ora sono uguali alla voce nel file. Se il computer è spento quando dovrebbe essere eseguito un comando in cron, quel comando non viene eseguito.
Credits
Questa guida è basata sull'originale presente su: http://openskill.info/infobox.php?ID=237