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!