27

Dec

Operazioni pianificate su Linux - Cron

Posted by muse as Linux

Cron è un demone di Gnu/Linux presente sin dalla prima versione di Unix del 1974, il suo scopo è quello di eseguire automaticamente delle operazioni con una cadenza scelta dall’utente.

Cron può essere utilizzato per svariati scopi, ad esempio per creare file di backup ogni tot minuti oppure per cancellare dei file temporanei periodicamente.. praticamente qualsiasi cosa possa essere fatta tramite comandi da shell …


Cron si può configurare tramite il file “crontab”, ne esiste uno per ogni utente, con il quale può eseguire comandi su file di sua proprietà nel proprio user-space, ed è situato solitamente in /var/spool/cron/crontabs/nomeutente.

Esiste poi il crontab di sistema /etc/crontab nel quale sono presenti solitamente operazioni periodiche che riguardano il sistema.

User Crontab.

Un normale utente può modificare il suo crontab con il comando crontab -e con il quale accede al suo file /var/spool/cron/crontabs/nomeutente con l’editor di default. Su Debian/Ubuntu molto probabilmente verrà avviato “nano” ma con il comando sudo update-alternatives –config editor è possibile cambiare l’editor predefinito scegliendone uno dalla lista che apparirà sullo schermo. Ad ogni riga corrisponderà un operazione secondo la seguente sintassi:
minuti ora giorno del mese mese giorno della settimana comando

I campi possono assumere determinati valori:

minuti (0-59)

ora (0-23)

giorno del mese (1-31)

mese (1-12)

giorno della settimana (0=Domenica … 6=Sabato)

Ad esempio la riga seguente serve a rimuovere i file temp dalla propria home directory ogni lunedì alle 23:00 :

23 00 * * 1 rm /home/muse/tmp/*

Ad ogni campo possono essere attribuiti valori particolari per eseguire operazioni ciclicamente oppure solo in determinati giorni o mesi. Ad esempio per catturare l’immagine dalla webcam ogni 5 minuti, dal lunedì al venerdì, solo a giugno, luglio e novembre (che fantasia) si può indicare:

*/5 * * 6,7,11 1-5 streamer -c /dev/video0 -b 16 -o capture.jpeg

dove */5 indica proprio “ogni 5 minuti”.

Una volta salvato, il crontab può essere visualizzato con il comando crontab -l e cancellato con crontab -r (questo comando cancellaerà tutte le entry). Se si vogliono apportare modifiche o cancellare singole entry, è necessario ricorrere nuovamente al comando crontab -e.

I comandi invocati da cron vengono eseguiti con i privilegi dell’utente a cui appartiene il crontab e con la sua home directory come path predefinito. tuttavia è possibile indicare a cron le variabili d’ambiente da utilizzare, indicandole nel file crontab o in uno script invocato:

HOME=/home/muse/

PATH=/usr/bin:/usr/sbin:/bin

SHELL=/usr/bin/sh

Quando un comando genera un output, cron lo invia all’utente tramite mail all’utente a meno che l’output del comando non venga dirottato, ad esempio con

23 00 * * 1 rm /home/muse/tmp/* > /dev/null

Allo stesso modo si può redirigere l’output su un file che costituirà il log degli eventi di cron.

Crontab di sistema e run-parts.

Nel crontab di sistema è presenta un campo in più che serve a indicare l’utente con il quale eseguire i comandi, spesso è root:

minuti ora giorno del mese mese giorno della settimana utente comando

In un crontab di sistema è possibile trovare delle entry che invocano dei run-parts, comandi che eseguono tutti gli scripts contenuti all’interno di directory suddivise a seconda della periodicità dell’esecuzione degli script. Queste directory sono /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly.

Posizionando uno script all’interno di una di queste directory verrà eseguito automaticamente ogni ora, giorno, settimana o mese a seconda della directory scelta, con privilegi di root., senza bisogno di dover specificare un crontab.

Autorizzazioni per Cron.

I file /etc/cron.allow e /etc/cron.deny contengono rispettivamente la lista degli utenti autorizzati o meno ad utilizzare cron. Questi file sono composti semplicemente da un’unica colonna in cui ogni riga corrisponde al nome di un utente, e possono anche non essere presenti nel sistema: in questo caso crontab consentirà a qualsiasi utente di eseguire un comando tramite cron, purchè l’utente abbia gli opportuni privilegi.

Al momento dell’esecuzione di un comando, Cron controlla per prima cosa l’esistenza del file /etc/cron.allow, nel caso quest’ultimo esiste allora il comando verrà eseguito solo se l’utente a cui appartiene il crontab è presente nella lista.

Se /etc/cron.allow non esiste, cron cerca il file /etc/cron.deny, se questo esiste allora il comando verrà eseguito solo se l’utente propietario del crontab non è presente nella lista.

Questo vale sia per i crontab di sistema, dove l’utente è specificato all’interno di ogni entry, che per i crontab degli utenti.

Comments are closed.