Crea sito

Unix – esecuzione automatica dei programmi tramite crontab

Sotto Unix, (il discorso vale anche per Linux) l'esecuzione in Automatico dei processi è demandata al programma CRON. Questo è un processo di sistema sempre attivo che ad orari prefissati lancia le applicazioni. L'elenco dei programmi da lanciare e dei relativi orari è codificato in un file chiamato "crontab" che si trova di norma sotto /etc/.
 
Il file /etc/crontab deve contenere solo i processi di sistema lanciati da root
 
Nei moderni Unix ogni utente può possedere un proprio file di "crontab" per lanciare ad orari prefissati i propri processi. Tale file si trova sotto /var/spool/cron/crontabs/ e deve essere gestito esclusivamente tramite l'apposito programma chiamato crontab.
Il programma crontab permette di inserire, visualizzare e cancellare il proprio file. I parametri con cui può essere lanciato sono:
 

crontab -r (remove) Cancella il file
crontab -l (list) Visualizza il file a video
crontab -e (edit) Permette di modificare il fil

 
Il file di crontab è codificato in 6 campi che contengono gli orari e il programma da lanciare.
I primi 5 campi sono nell'ordine:

campo valori ammessi
minuto 0-59
ora 0-23
giorno del mese 1-31
mese 1-12 oppure jan,feb,mar…
giorno settimana 0-7 (0 e 7 rappresenta domenica) oppure sun,mon,tue…

In sintesi:

*  *  *  *  *  comando da eseguire
|  |  |  |  |
|  |  |  |  \---- giorno della settimana (0 - 7) (domenica=0 o 7) oppure sun,mon..
|  |  |  \------- mese (1 - 12) oppure jan,feb,mar,apr...
|  |  \---------- giorno del mese (1 - 31)
|  \------------- ora (0 - 23)
\---------------- minuto (0 - 59)

Un campo può essere un asterisco che significa "dal primo all'ultimo".  Sono permessi range di numeri. I range sono due numeri separati da un trattino. I numeri specificati nel range sono inclusi. Ad esempio 8-11 specificato sulle ore indica un esecuzione alle 8, 9, 10 e 11.
Le liste sono permesse. Una lista è un set di numeri (o di range) separati da virgole. Ad esempio:
 
1,2,5,9 oppure 0-4,8-12.
 
Il "sesto" campo (il resto della linea) specifica il comando da lanciare.
Alcuni esempi:

# Esegue 5 minuti dopo mezzanotte, ogni giorno
5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
 
# Esegue alle 14:15 il primo giorno di ogni mese 
15 14 1 * *     $HOME/bin/monthly

Se il comando lanciato produce un output sullo standard output o sullo standard error, il risultato viene inviato all'utente tramite mail. Per evitare questa cosa è sufficiente reindirizzare lo standard output su un file e lo standard error sullo standard output. Volendo si può reindirizzare tutto su /dev/null. Ad esempio:

# esegue mio_backup.sh tutte le mattine alle ore 6:00
0 6 * * * $HOME/bin/mio_backup.sh >/dev/null 2>&1

Filed Under: unix

Tags:

About the Author: Marzio

RSSComments (0)

Trackback URL

Leave a Reply




If you want a picture to show with your comment, go get a Gravatar.