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 èove 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òsere fatto partire da rc o da rc.local e ritorna immediatamente al prompt, sicchèon c'éisogno di lanciarlo in background. Cro 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òene 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 èambiato c c) se il modtime nella directory cron èambiato, cron ricerca tutti i file e ricarica i programmi che sono stati modificati. Poichéron cerca le modifiche ogni minuto, non èecessario farlo ripartire quando sono stati effettuati dei cambiamenti (editati) nei file ne della directory cron. Utilizzare crontab Il "cron daemon" legge il file "crontab"; ogni utente puòere 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 èa 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 èmessa, il sistema deduce per default che state usando il vostro crontab personale. Il comando switch user (su) puònfondere il crontab, cosìe 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 èefinita, parte in automatico l'editor "vi". Quando si esce dall'editor, èmmediamente 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àe diverse variabili ambientali. Per esempio, SHELL èettato 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 èossibile farlo con LOGNAME. Se MAILTO èefinito (e non èettato a " "), tale variabile ènserita 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 èl 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 èl crontab di sistema, il campo successivo èo username associato con la voce. Il campo seguente saràl comando da eseguire. Il comando verràseguito solo quando la data e l'ora corrente coincideranno con tutti i valori dei campi time/date del crontab. Nel paragrafo succ. vi èn 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 èmmesso. 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 èssociato ad eventi orari (eseguiti nel primo minuto di ogni ora) Il secondo èssociato ad eventi giornalieri (eseguiti alle ore 4:02 di ogni giorno) Il terzo èssociato ad eventi settimanali (eseguiti alle 4:22 di ogni domenica) L'ultimo èssociato 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 èpento quando dovrebbe essere eseguito il cron, quel programma non viene piùguito. 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àuella 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 èezzanotte, 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òpersonificare qualsiasi utente. Questo campo puòche 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=: setta l'umask specificata prima di eseguire gli script/programmi; L'umask di default e' 022; --arg=: 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 èll'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 è'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 ètato 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 èa 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 : 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òntenere 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