mercoledì 20 gennaio 2010

cron:automatizzare i processi

Problema: Avviare automaticamente l'esecuzione di un processo.

Soluzione: L'esecuzione automatica di programmi sulla base di una agenda stabilita può essere facilmente realizzata in ambiente “unix” grazie al comando “crontab”. Per esempio immaginiamo di aver a disposizione uno script “ backup.sh” per eseguire la copia di backup di una selezione di importanti documenti su di un disco esterno. Per cominciare creiamo una directory nascosta tipo “.cron.daily” nella nostra home, copiamoci il file “ backup.sh” dentro e rendiamolo eseguibile

  1. mkdir .cron.daily

  2. cp backup.sh /home/nome_utente (sostituire col vostro nome utente) .cron.daily/

  3. sudo chmod +x /home/nome_utente/.cron.daily/backup.sh


I processi che vengono eseguiti da cron sono elencati in appositi file. A livello di sistema i processi sono elencati nel file /etc/crontab, a livello utente è però possibile creare nella home un file crontab, per esempio possiamo creare un file nascosto .crontab

Ecco un crontab campione

# minuti ore mday month wday comando

15 03 * * * sh /User/nome_login/.cron.daily/backup.sh

15 03 1 * * sh /User/nome_login/.cron.daily/Sample1

15 03 * * 6 sh /User/nome_login/.cron.daily/Sample2

*/15 03 * * * sh /User/nome_login/.cron.daily/Sample3

Nella prima linea ci sono le intestazioni dei file che specificano il significato delle diverse entry che iniziano dalla seconda linea. Le voci sono raggruppate in colonne separate da un tab.

La seconda linea corrisponde all'esecuzione dello script di backup, lanciato alle 03:15 tutti i giorni della settimana (wday) per tutti i giorni (mday) di tutti i mesi (month). Gli asterischi significano sempre.

Ci sono anche altri esempi:

Linea 3: esegue il comando sample 1 alle 3:15 soltanto il 1 giorno di ogni mese.

Linea 4: esegue il comando sample 2 alle 3:15 de 6 giorno ogni della settimana.

Linea 5: Esegue il comando sample 3 ogni 15 minuti.

Alle variabili di cron tab è possibile assegnare i seguenti parametri

"minuti" 0-59, "ore"0-23, "mday2 1-31, "wday" 0-7 (0 e 7 = domenica), oppure con le prime 3 lettere del nome del giorno, (es. “Thu” per Thursday), month 1-12, oppure con le prime tre lettere del nome del mese (es. “Jan” per “January”).

É possibile settare anche intervalli o sequenze (separati da virgole). Per esempio, 8-11 nella colonna delle ore verrà associato l'esecuzione di un comando alle 8, 9, 10, e 11. Una sequenza come 1,2,5,9 nella colonna delle ore verrà associata alla esecuzione dello script alle ore 1, 2, 5, e 9.

Una volta creati e posizionati crontab e i relativi script non resta che avviare il processo digitando:

crontab /Users/nome_login/.crontab

per fermare cron basta eseguire il comando:

crontab -r

Mentre per stampare a schermo la lista dei processi gestiti da cron basta digitare

cronta -l

é importante periodicamente controllare quali processi sono in funzione dal momento che crontab può occasionalmente fermarsi ad esempio in occasione dell'aggiornamento del software.


Nessun commento:

Posta un commento

Lettori fissi