Cos’è e come funziona il demone Cron

Uno dei processi (demoni) meno conosciuti dei sistemi Unix è il Cron.

Cron? Cos’è una marca di orologi?

Il demone Cron (non è un racconto horror, tranquilli) è appunto un processo di Unix che esegue comandi o istruzioni in determinate date ed orari, come definito dall’utente.

Cron può gestire i comandi (jobs) in modo da eseguirli una sola volta alla prima occorrenza della data/ora scelta, ma è anche in grado di eseguirli ripetutamente (ad esempio nel caso si voglia eseguire una determinata operazione ogni giorno alle ore 14). In quest’ultimo caso viene usato il ‘crontab‘.

La prima applicazione che mi viene in mente in questo contesto, è un sistema di backup che sfrutta il Cron per effettuare backup periodici; oppure ad esempio se si vuole spegnere il PC ad una determinata ora.

Come utilizzare il servizio Cron?

Come ho già accennato, Cron è un demone, quindi un servizio che necessita solamente dell’avvio (dopodichè lavorerà in background).

Sulla maggior parte dei sistemi Linux, Cron è installato di default e viene avviato in automatico dal sistema operativo.

Ogni distribuzione Linux gestisce però Cron in maniera diversa; per semplicità descriverò l’uso con una distribuzione Red Hat (tra le più usate in ambito professionale).

Con tale distribuzione, si rende necessario l’installazione del pacchetto RPM vixie-cron.


Il demone si chiama crond e naturalmente deve essere abilitato, per controllarne lo stato basta digitare:

 /sbin/service crond status

Per avviare Cron si utilizza il comando:

/sbin/service crond start

per interromperlo, invece:

/sbin/service crond stop

Per configurare Cron, si usa un file presente nella cartella /etc/crontab, che rappresenta una tabella in cui sono elencate date e orari (infatti ‘crontab’ sta per ‘Cron Table’). 

All’apertura del file troveremo:

SHELL=/bin/bash

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

MAILTO=root

HOME=/

queste righe rappresentano la configurazione dell’ambiente sul quale viene eseguito il demone; rispettivamente:

SHELL = il tipo di shell

PATH = il percorso utilizzato per eseguire i comandi

MAILTO = permette di indicare un’indirizzo e-mail a cui mandare il risultato di tutte le operazioni eseguite tramite cron (questo valore può anche essere vuoto, in tal caso indicare MAILTO=”"  e non sarà inviata nessuna mail).

HOME = usata per impostare la directory principale da cui far partire tutti i comandi

Successivamente troveremo:

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

queste righe sono necessarie per eseguire i comandi; ad ogni riga corrisponde un’operazione.

Come è facile notare, ogni riga è composta da 5 valori (rappresentati in forma numerica o tramite il carattere jolly ‘*’)  seguite dallo script da eseguire (nell’esempio lo vediamo rispettivamente su base oraria, giornaliera, settimanale o mensile).

Ogni riga assume così il seguente formato:

minuto ora giorno mese giornodelmese    comando

minuto = qualsiasi numero intero compreso tra 0 e 59

ora = qualsiasi numero intero tra 0 a 23

giorno = qualsiasi numero intero tra 0 e 7 (0 e 7 rappresentano la domenica)

mese = qualsiasi numero intero tra 1 e 12

giornodelmese =  qualsiasi numero intero tra 0 e 7 (0 e 7 rappresentano la domenica)

L’asterisco può essere usato come carattere jolly per rappresentare tutti i valori accettabili (ad esempio, un asterisco inserito come valore nel ‘campo’ ora, indica che tale comando deve essere eseguito ad ogni ora, in base ovviamente anche ai valori degli altri ‘campi’). 

La potenzialità del crontab non si limitano a questo, infatti è possibile inserire elenchi, intervalli e valori da ignorare:

- il carattere virgola ( , ) permette di inserire in un solo campo un elenco di valori (1, 3, 6, 8, 9)

- il carattere trattino ( – ) consente di inserire in un solo campo un intervallo di valori (1-5)

- il carattere slash ( / ) consente di inserire i valori da escludere (1/6/8).

Per gli utenti che hanno privilegi root, esiste il servizio crontab che permette di definire i jobs da eseguire tramite cron.

I crontab definiti tramite questo comando, vengono salvati nella directory /var/spool/cron.

Utilità dei cronjobs sul web

Visto le possibilità offerte dal demone Cron, è facile intuire i modi in cui questo servizio può essere usato tramite web server.

Applicazioni che usano il demone cron sono le più quotidiane: sistemi di newsletter, backup, aggiornamento pagine, ecc.

Vedremo in un prossimo articolo come poter sfruttare il servizio Cron per automatizzare determinate situazioni in ambito web.

Intanto se avete configurazioni particolari o commenti da condividere, questo è il posto adatto!

Articoli che ti potrebbero interessare

About the Author

L’autore di questo blog si chiama Luca Grillo ed é imprenditore nonchè freelancer professionista in ambito informatico e commerciale. Da quando avevo tre anni, la mia passione principale è stata l’informatica, ma dopo la prima esperienza lavorativa, i miei interessi sono mutati dal “semplice” ruolo del programmatore a quello di Manager IT. Nel 2008 fondo la mia ditta, la Byte Systems, che si occupa di fornire servizi e prodotti informatici per aziende e professionisti. Con gli anni cresce anche la mia passione per il mondo della comunicazione, decido così di aprire il mio primo blog professionale dedicato al mondo imprenditoriale, successivamente nasce IstruttoreDigitale.com, blog informativo nato allo scopo di presentare consigli, idee, guide, news o semplici pensieri legati principalmente al mondo della tecnologia informatica ed al marketing. Attualmente scrivo periodicamente per diverse testate facenti capo al gruppo editoriale HTML.IT.