Inserisci Infobox

Schedulazione dei processi

Utilizzo di crontab e at. Configurazione e alternative a crontab.

Introduzione al servizio Scheduling di crontab
Autore: pillolinux - Ultimo Aggiornamento: 2002-10-09 16:21:05 - Data di creazione: 2002-10-09 16:21:05
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

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.

/etc/crontab
Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2002-10-24 15:39:32 - Data di creazione: 2002-10-24 15:39:32
Tipo Infobox: PATH - Skill: 2- JUNIOR

File di configurazione generale del demone crond contenente le operazioni schedulate di default o manulamente dall'utente root.

La sintassi di crontab prevede una riga, con campi separati da uno spazio o un tab, per ogni comando da schedulare.
mm hh gg MM GG user comando
I primi 5 campi servono per definire quando eseguire il comando specificato nel settimo campo. Possono contenere valori separati da virgola o un asterisco che indica tutti i calori possibili:
1) mm Minuto in cui eseguire il comando. Valori da 00 a 59.
2) hh Ora in cui eseguire il comando. Valori da 0 a 23 (0 è mezzanotte, 12 mezzogiorno)
3) gg Giorno del mese in cui eseguire il comando. Valori da 1 a 31.
4) MM Mese dell'anno in cui eseguire il comando. Valori da 1 a 12.
5) GG Giorno della settimana in cui eseguire il comando. Valori da 0 a 6. (0 corrisponde alla Domenica, 1 al Lunedì.. )
6) Utente con cui viene eseguito il comando. Crond viene eseguito come root e può impersonificare qualsiasi utente. Questo campo può anche essere omesso (root di default).
7) Riga di comando da eseguire (con eventuali opzioni, argomenti ecc.)

Vediamo un esempio:
[neo@dido neo]$ cat /etc/crontab
Variabili che settano l'enviroment per il lancio di script o di comandi
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

Le entry riportate di seguito sono quelle di default di una RedHat ed esegue a seconda della scadenza gli script contenuti nelle varie directory
# 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


Il file di crontab relativo al singolo utente in: /var/spool/cron/$user

run-parts
Autore: homer - Ultimo Aggiornamento: 2004-01-09 18:12:08 - Data di creazione: 2004-01-09 18:12:08
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

Si occupa di mandare in esecuzione tutti gli script o i programmi contenuti in una directory.

Esegue tutti i programmi contenuti nella directory passata come parametro. Eventuali sottodirectory vengono ignorate. Gli script da eseguire devono contenere come prima linea il nome dell'interprete nel formato #!/bin/nome-interprete altrimenti non verrano eseguiti.

run-parts [opzioni] directory
--test: visualizza il nome degli script che dovrebbero essere eseguiti ma senza mandarli in esecuzione;
--verbose: stampa sullo standard error il nome di ogni script/programma prima di eseguirlo;
--report: simile a --verbose ma con la differenza che stampa solamente il nome degli script che producono un output;
--umask=<umask>: setta l'umask specificata prima di eseguire gli script/programmi; L'umask di default e' 022;
--arg=<argomenti>: passa eventuali argomenti allo script; E' necessario utilizzare --arg per ogni argomento passato;
--help: visualizza l'help in linea ed esce;
--version: visualizza la versione il copyright ed esce;

Il suo utilizzo tipico è all'interno del file di configurazione di crontab:
[root@pluto etc]# cat /etc/crontab
[...]
# run-parts
01 * * * * root nice -n 19 run-parts /etc/cron.hourly

In questo esempio vengono eseguiti in tutte le ore di ogni giorno (al minuto 01) tutti i programmi/script contenuti nela directory /etc/cron.hourly

Schedulare i processi con anacron
Autore: homer - Ultimo Aggiornamento: 2003-11-21 16:01:27 - Data di creazione: 2003-11-21 16:01:27
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Anacron è l'alternativa a cron da utilizzare per la schedulazione di processi su macchine non utilizzate come server e quindi non sempre in funzione.

Questo demone permette di eseguire processi schedulati nell'arco di tempo in cui la macchina non era in funzione e che quindi tramite cron non sarebbero stati eseguiti. Anacron utilizza il file /etc/anacrontab per la schedulazione e la directory /var/spool/anacron per tenere traccia dei compiti svolti.

Per ogni job-description line inserita in anacrontab, anacron controlla se il comando è stato eseguito nel periodo specificato ed in caso contrario lo esegue con il ritardo specificato. Una volta eseguito il comando, la sua data di esecuzione viene registrata in un file di time-stamps identificato dal nome univoco assegnato al processo nella directory /var/spool/anacron. Una volta terminati i job da eseguire anacron termina.

Per default in caso di errore viene inviata una mail all'utente che ha avviato anacron, mentre gli altri messaggi vengono loggati da syslogd.

anacron
Autore: homer - Ultimo Aggiornamento: 2003-07-13 19:04:24 - Data di creazione: 2003-07-13 19:04:24
Tipo Infobox: COMMANDS - Skill: 2- JUNIOR

E' l'eseguibile del demone anacron.

Anacron, viene tipicamente avviato tra gli script di boot del sistema. La sua sintassi è la seguente:

anacron [opzioni]
-f: forza l'esecuzione di anacron ignorando i timestamps;
-s: serializza l'esecuzione dei job. Non avvia l'esecuzione di un nuovo job finche' il precedente non e' stato terminato;
-n: avvia l'esecuzione dei job senza tenere conto di quanto specificato in /etc/anacrontab. Implica l'utilizzo dell'opzione -s.
-d: non esegue il demone in background, e visualizza i messaggi di stato sullo standard error:
-u: aggiorna solamente i file di time-stamps senza eseguire jobs;
-q: non visualizza messaggi sullo standard error quando l'esecuzione avviente con l'opzione -d;
-t <nomefile> : Utilizza il file di configurazione specificato anziche' quello di default;
-V: stampa la versione ed esce;
-h: visualizza la guida ed esce.

/etc/anacrontab
Autore: homer - Ultimo Aggiornamento: 2003-07-13 19:05:26 - Data di creazione: 2003-07-13 19:05:26
Tipo Infobox: PATH - Skill: 2- JUNIOR

E' il file di configurazione di anacron.

Questo file descrive il comportamento di anacron. Esso può contenere assegnamenti di variabili, linee vuote e linee di commento le quali iniziano con il carattere #.

Ogni entry nel file di configurazione contiene 4 parametri:
-1 periodo: ogni quanto tempo, in giorni, deve essere eseguito un comando;
-2 ritardo: il tempo di ritardo, in minuti, per l'avvio del comando (utile per non sovraccaricare il sistema con troppo processi attivi);
-3 nome-job: un nome univoco per identificare il comando;
-4 comando: il comando vero e proprio da eseguire;

Un esempio del contenuto di anacrontab:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Setting delle variabili per l'esecuzione dei job

1   65      cron.daily              run-parts /etc/cron.daily
7   70      cron.weekly             run-parts /etc/cron.weekly
30  75      cron.monthly            run-parts /etc/cron.monthly

Schedulazione rispettivamente di processi giornalieri, settimanali e mensili

Privacy Policy