Unix – esecuzione automatica dei programmi tramite crontab
By marzio on ago 24, 2010 with Commenti 0
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
About the Author: Marzio