Cookie

Crontab: azioni pianificate con Linux

Pubblicato da TheJoe il

Tempo di lettura stimato: 3 minuti

Attenzione


Questo articolo è stato pubblicato più di un anno fa, potrebbero esserci stati sviluppi.
Ti preghiamo di tenerne conto.

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

ComandoDescrizione
crontab -eModifica il file di crontab, o ne crea uno se non esiste
crontab -lMostra il file di crontab
crontab -rRimuove il file di crontab
crontab -vMostra 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.

Guarda qui:  VNC su SSH per connessioni sicure

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.

minoregior/mesemesegior/settquando si avvia?
30011,6,12*00.30 il 1 di gennaio, giugno e dicembre
020*101-5alle 20.00 ogni giorno della settimana (lun-ven) solo ad ottobre
001,10,15**a mezzanotte, il 1mo, il 10 e il 15 del mese
5,10010*1alle 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

TheJoe

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.

0 commenti

Lascia un commento

Segnaposto per l'avatar

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.