Crontab: azioni pianificate con Linux
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
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.
0 commenti