|
||
| [IT] Cron, crontab: funzionamento | ||
|
Cron, crontab: funzionamento A volte sorge la necessita' di eseguire un comando, uno script o un programma ad intervalli regolari di tempo, un mese, un'ora, un giorno, una settimana o altri. Un meccanismo sempre presente in Linux e' rappresentato dal demone cron. Si tratta di un programma che gira in background e, ad intervalli regolari, esegue dei compiti ben precisi. Normalmente non bisogna installarlo in quanto gia' attivo nel proprio sistem (consideriamo una distribuzione Linux RedHat). Vediamo come funziona. Cron viene attivato ogni minuto e legge degli opportuni file di configurazione dove vengono specificate le operazioni da compiere e gli intervalli relativi. Se trova qualcosa da eseguire nel minuto in cui si e' attivato, allora procede all'operazione. Tutto cio' che viene scritto sullo standard output, viene inviato via email al proprietario del cron, tipicamente "root". Cron non deve essere riavviato per ogni modifica. Ci sono tre modi diversi di specificare operazioni ed intervalli. Primo modo La via piu' semplice e' la creazione di uno script (sh, bash, perl o altro) che esegue cio' che vogliamo. Tale script andra' inserito in una delle directory seguenti /etc/cron.dailyper poter essere eseguito ad intervalli ben definiti (rispettivamente un giorno, un'ora, un mese e una settimana). E' possibile anche mantenere tutti gli script in una directory standard (ad esempio "/scripts") e poi creare un soft link ("man ln", "ln -s") in una di quelle sopra elencate. I cron giornalieri, mensili e settimanali di solito vengono eseguiti alle 4:00 (piena notte!). Secondo modo Per intervalli di tempo diversi da quelli standard, e' possibile usare la directory /etc/cron.doppure il file /etc/crontabIn cron.d possono essere inseriti file con formato particolare (lo stesso di crontab), indicanti operazioni ed intervalli di tempo piccoli anche solo minuto. Formato: possono essere inseriti in ogni file
Per quanto riguarda le variabili di ambiente, fra le possibili utilizzabili vi sono
I comandi cron rappresentano la parte piu' complessa della configurazione. Il formato di un comando cron e' il seguente: s1 s2 s3 s4 s5 Proprietario ComandoComando e' un comando da eseguire (con i relativi parametri ed eventuali redirezioni di output). Proprietario indica a chi appartiene il comando cron (es. root o altri utenti). s1, s2, s3, s4, s5 sono stringhe che specificano l'intervallo di esecuzione. Ognuna di queste stringhe puo' contenere il carattere "*" per indicare tutti i valori possibili. "s1" rappresenta i minuti. I valori permessi vanno da 0 a 59. E' possibile specificare anche intervalli (piu' avanti spiegati brevemente). "s2" rappresenta le ore. I valori permessi vanno da 0 a 23. E' possibile specificare anche intervalli (piu' avanti spiegati brevemente). "s3" rappresenta i giorni all'interno di un mese. I valori permessi vanno da 1 a 31. E' possibile specificare anche intervalli (piu' avanti spiegati brevemente). "s4" rappresenta i mesi. I valori permessi vanno da 1 a 12 (piu' i nomi in lettere). E' possibile specificare anche intervalli (piu' avanti spiegati brevemente). "s5" rappresenta i giorni della settimana. I valori permessi vanno da 0 a 7 (piu' i nomi in lettere, 0 e 7 rappresentano entrambi la Domenica). E' possibile specificare anche intervalli (piu' avanti spiegati brevemente). Tutte e cinque le stringhe possono rappresentare un numero, tutti i valori oppure un intervallo. Specificando un numero, si indica un momento preciso. Ad esempio, mettere 2 in s4, significa eseguire a Febbraio (vanno considerate poi anche tutte le altre 4 stringhe). Se il particolare campo non interessa, cioe' non e' utile alla definizione del tempo di attivazione, puo' essere usato l'asterisco ("*") per indicare tutti i valori. Molto spesso, pero' quello che serve e' un certo intervallo e non un momento unico e preciso. Per esempio, potremmo volere eseguire un comando ogni 2 minuti invece che sempre e solo nel secondo minuto. In questo caso, possiamo scrivere le cinque stringhe (o solo una parte di esse) sotto forma di intervallo. Vediamone qualche formato (non tutti potrebbero essere supportati su tutti i sistemi):
Qualche esempio (non far caso ai comandi inseriti): # Esegue il comando indicato ogni cinque minuti, solo il 15 di ogni mese, # con proprietario "root" */5 * 15 * * root /bin/ls /var/log>/temp/ls.out # Manda una mail con il testo indicato ogni giorno alle 8:00 di mattina, # con proprietario "root". Se MAILTO vale "root" allora la mail arriva a root. 0 8 * * * root echo "Buongiorno!!!" #Esegue ogni minuto!!! Il proprietario e' "pippo". * * * * * pippo /usr/bin/gimp Terzo modo Un utente diverso da root, per usare dei propri comandi cron personalizzati, puo' inserirli in /var/spool/cronIl file non dovrebbe essere editato direttamente (e di solito non puo' esserlo da parte di un utente diverso da root) in quanto viene gestito dal comando /usr/bin/crontab. L'idea e' che venga mantenuto un file master con i cron di un utente. La sintassi di questo file e' la stessa vista per "/etc/cronttab". Il file master puo' risiedere ovunque nel filesystem. Con l'installazione, crontab ne copia il contenuto all'interno del file "/var/spool/cron/nomeutente". Sempre con crontab ("man crontab") e' possibile rimuovere i cron installati. La politica per cui un utente puo' usare il comando "crontab" e' regolata dai file /etc/cron.allowPer illustrare come usare le funzionalita' di questo terzo tipo, supponiamo di usare come "cavia" l'utente "pippo" con home directory "/home/pippo". Creiamo il file "/home/pippo/prova.cron" con il seguente contenuto: # /home/pippo/prova.cron # Test di utilizzo di crontab MAILTO=pippo@localhost * * * * * pippo echo "ciao pippo"Questo cron setta la mail per inviare l'output a pippo e scrive il messaggio "ciao pippo" ogni minuto. Per installare il contenuto del file indicato, eseguire /usr/bin/crontab -u pippo /home/pippo/prova.cronse si sta lavorando come utente root, oppure /usr/bin/crontab /home/pippo/prova.cronse si sta lavorando come utente "pippo". Si notera' la comparsa del file "/var/spool/cron/pippo" (se non esisteva) con il seguente contenuto (o simile): # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/home/pippo/prova.cron installed on Mon Dec 24 15:27:23 2001) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) MAILTO=pippo@localhost * * * * * pippo echo "ciao pippo"Evidente e' l'avvertimento di non modificare questo file, ma il master "/prova/prova.cron". ATTENZIONE! L'installazione dei cron di un utente, sovrascrive i cron eventualmente gia' presenti per l'utente stesso. Per aggiungere comandi cron senza eliminare quelli precedenti, e senza inserirli prima nel master, usare /usr/bin/crontab -u pippo -ese si sta lavorando come utente root, oppure /usr/bin/crontab -ese si sta lavorando come utente "pippo". Si aprira' l'editor "vi" con i comandi gia' presenti e ci sara' la possibilita' di inserirne di nuovi oppure di modificare, oltre che eliminare, quelli esistenti. Tutto cio' non tocca il file master ma solo il file "/var/spool/cron/pippo", evitando la procedura di reinstallazione. Tipicamente si edita il file master e lo si reinstalla, in modo da evitare di perdere le modifiche inserite con "-e". Per eliminare i cron inseriti, usare /usr/bin/crontab -u pippo -rse si sta lavorando come utente root, oppure /usr/bin/crontab -rse si sta lavorando come utente "pippo". Per ulteriori informazioni, leggere il manuale: "man cron", "man crontab", "man 5 crontab". |
||
(c) 1999-2006
|