TheJoe.it Into the (open) source

29mar/130

Crontab: azioni pianificate con Linux

Attenzione!

Questo articolo è stato scritto nel 2013, potrebbero esserci stati sviluppi circa l'argomento trattato.
In caso di dubbi lasciate un commento in fondo all'articolo.
Grazie.

cronometro_300

Il programma di cui parliamo oggi è cron, un leggero demone per Linux che si occupa di lanciare dei comandi a intervalli definiti dall'utente. Spesso viene confuso con "crontab", che in realtà altro non è che il suo file di configurazione, contenente i comandi da lanciare e gli intervalli di tempo. Qualcuno si ricorderà di crontab (l'abbiamo usato nel tutorial sul "time lapse" per scattare foto in automatico). Nell'articolo di oggi vediamo una panoramica del funzionamento di cron, corredato da esempi di utilizzo e modifica del file crontab.

È possibile eseguire crontab se l'alias utente di chi prova a modificarlo appare nel file "/usr/lib/cron/cron.allow". Se il file non esiste, puoi usare crontab se il tuo nome utente non appare nel file "/usr/lib/cron/cron.deny". Nel caso in cui esista solo il file "cron.deny" e sia vuoto, tutti gli utenti possono usare crontab. Se nessuno dei due file esiste, solo root può usare crontab. La struttura dei due file (allow e deny) consiste in un alias utente per riga.

I comandi di crontab

export EDITOR=nano ;specifica un editor con cui aprire crontab

Comando Descrizione
crontab -e Modifica il file di crontab, o ne crea uno se non esiste
crontab -l Mostra il file di crontab
crontab -r Rimuove il file di crontab
crontab -v Mostra l'ultima volta che si è modificato il file (possibile solo su alcuni sistemi)

 La sintassi di crontab

Un file di crontab ha cinque campi per specificare giorno, data e ora, seguiti dal comando che dev'essere eseguito.

* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- giorno della settimana (0 - 6) (domenica = 0)
| | | +------- mese (1 - 12)
| | +--------- giorno del mese (1 - 31)
| +----------- ora (0 - 23)
+------------- minuto (0 - 59)

Il presente schemino è indicato anche nel file crontab e si spiega da solo: quando vogliamo che il comando venga eseguito sostituiamo gli asterischi (o l'asterisco) con i valori numerici riportati.

Per i sistemi operativi che lo supportano è anche possibile specificare "/2" per lanciare il comando ogni due minuti. Se provi a usarlo e crontab si lamenta probabilmente non è supportato. Per aggirare in parte questo ostacolo, è possibile duplicare la riga di crontab e impostare uno sleep di alcuni secondi.

* * * * * /home/user/script/script.sh
* * * * * sleep 15; /home/user/script/script.sh
* * * * * sleep 30; /home/user/script/script.sh
* * * * * sleep 45; /home/user/script/script.sh

In questo esempio lo script verrà eseguito ogni minuto, il secondo con un ritardo di 15 secondi, il terzo di 30 e il quarto di 45.

Come si è visto, la specifica del giorno può essere fatta su base settimanale o mensile. Se entrambi i campi sono compilati, il comando verrà eseguito in entrambe le situazioni.

Qualche esempio

Questa riga di crontab elimina il contenuto della directory "/home/user/tmp/" ogni sera alle 18.30.

30 18 * * * rm /home/user/tmp/*

Cambiando i parametri come sotto causerà uno spostamento nell'esecuzione del comando.

min ore gior/mese mese gior/sett quando si avvia?
30 0 1 1,6,12 * 00.30 il 1 di gennaio, giugno e dicembre
0 20 * 10 1-5 alle 20.00 ogni giorno della settimana (lun-ven) solo ad ottobre
0 0 1,10,15 * * a mezzanotte, il 1mo, il 10 e il 15 del mese
5,10 0 10 * 1 alle 12.05, 12.10 tutti i lunedì e il 10 di ogni mese

Log

È ovviamente possibile fare in modo che crontab registri dei log dell'attività. In questo caso il comando (prendiamo come esempio quello di prima) andrà così formato:

30 18 * * * rm /home/user/tmp/* > /home/user/cronlogs/clean_tmp_dir.log

Alternative

Per chi invece non avesse dimestichezza con la riga di comando, o lo trovi particolarmente laborioso, esistono svariate valide alternative per la modifica di crontab tramite interfaccia web. L'unica che mi sento di consigliare è webmin, che oltre a permettere la modifica di crontab, permette l'amministrazione di tutto il sistema linux senza bisogno di impostare l'accesso SSH o utilizzare il terminale, si può fare tutto tramite interfaccia web. Ma forse questo programma merita un articolo dedicato.

webmin_cron

About

Mantengo questo blog a livello amatoriale dal 2009. Sono appassionato di grafica, tecnologia, software Open Source. Fra i miei articoli non sarà difficile trovarne circa la musica, ed alcuni di riflessioni personali, ma preferisco indirizzare la linea del blog principalmente verso la tecnologia. Per informazioni contattami.

Commenti (0) Trackback (0)

Ancora nessun commento.


Leave a comment

Ancora nessun trackback.