Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Configurazione di Cron

Imparare ad utilizzare cron e il file crontab per automatizzare l'esecuzione di comandi e task su un server Linux, in particolare con Ubuntu Server.
Imparare ad utilizzare cron e il file crontab per automatizzare l'esecuzione di comandi e task su un server Linux, in particolare con Ubuntu Server.
Link copiato negli appunti

Nell'amministrazione di un sistema server, si rendono spesso necessarie delle operazioni periodiche di manutenzione, al fine di assicurarne il corretto funzionamento. Alcuni esempi possono essere l'esecuzione dei backup o l'aggiornamento degli elenchi dei pacchetti disponibili nei repository. Sebbene sia possibile effettuare queste operazioni manualmente, lanciando i relativi comandi quando necessario, un approccio del genere renderebbe notevolmente più lungo e tedioso il lavoro dell'amministratore di sistema. Per ovviare al problema, esistono dei sistemi in grado di automatizzare le operazioni da effettuare ad intervalli di tempo regolari.

In ambienti Unix e GNU/Linux, il servizio utilizzato per questo scopo si chiama Cron e nella maggior parte dei casi è già presente nel sistema. Le implementazioni oggi più comunemente utilizzate derivano dal lavoro di Paul Vixie (Vixie cron).

Il funzionamento di Cron è molto semplice. Esso si basa su una lista di comandi da eseguire periodicamente (una lista per ogni utente), nella quale è indicato per ciascun comando il relativo intervallo di tempo desiderato (ad esempio, "ogni giorno alle ore 12:00", oppure "ogni primo giorno del mese", ecc). Tale lista di comandi è nota con il nome di crontab (ovvero cron table, tabella di cron).

Configurazione di cron

La configurazione di cron avviene modificando la crontab con un editor di testo, invocando il comando crontab:

# crontab -e

con l'opzione -e, si modifica la tabella di cron per l'utente che ha invocato il comando. Pertanto, se le operazioni da invocare con cron vanno eseguite dall'utente root, dobbiamo assicurarci di lanciare il comando crontab dopo aver effettuato il login con l'utente root.

Sintassi di crontab

La sintassi del file crontab è molto semplice. Ogni operazione da effettuare viene descritta da una riga così formata:

mm hh gg MM GG YYYY comando

dove:

  • mm indica il minuto di esecuzione, ed è un valore numerico compreso tra 0 e 59;
  • hh indica l’ora di esecuzione, ed è un valore numero compreso tra 0 e 23;
  • gg indica il giorno di esecuzione, ed è un valore numerico compreso tra 1 e 31;
  • MM indica il mese di esecuzione, ed è un valore numerico compreso tra 1 e 12, oppure una stringa composta dalle prime tre lettere del nome del mese in lingua inglese (da JAN a DEC);
  • GG indica il giorno della settimana in cui verrà eseguito il comando, ed è un valore numerico compreso tra 0 e 6, dove 0 indica la Domenica, 1 il Lunedì, fino 6 che indica il Sabato. In alternativa, è possibile utilizzare una stringa composta dalle prime tre lettere del nome del giorno in lingua inglese (MON, TUE, WED, THU, FRI, SAT, SUN);
  • YYYY (opzionale) indica l'anno o l'intervallo di anni in cui eseguire il comando;
  • comando indica il comando da eseguire.

Ad esempio, la riga:

0 16 1 1 1 comando.sh

Farà eseguire automaticamente lo script comando.sh alle ore 16 del primo Gennaio, se questo è un Lunedì.

Valore jolly

Ovviamente una descrizione così precisa, in cui tutti i campi della riga crontab contengono dei valori, può essere poco utile. Ecco perché è possibile specificare un valore "jolly", utilizzando l'asterisco (*) per indicare a cron di eseguire il comando indipendentemente dal valore del campo corrispondente. Modificando l'esempio di cui sopra:

0 16 1 1 * comando.sh

lo script verrà eseguito ogni anno alle ore 16 del primo Gennaio, indipendentemente dal giorno della settimana.

Analogamente, per eseguire lo script ogni giorno alle 23:00, la riga di crontab sarà:

0 23 * * * comando.sh

Valori multipli

E se volessimo invocare lo script comando.sh ogni giorno sia alle 10 del mattino che alle 23? Ovviamente è possibile inserire due righe nella crontab, con i due diversi orari. Si può ricorrere anche ad una sintassi più concisa, specificando i due orari nel campo hh, separati da una virgola:

0 10,23 * * * comando.sh

Intervalli

Infine, è possibile specificare un intervallo di valori per i campi della riga crontab, separando i due valori con un trattino. Ad esempio:

0 10,23 * 1-3 * comando.sh

eseguirà lo script comando.sh ogni giorno alle 10 ed alle 23, ma solo tra Gennaio e Marzo.

Commenti

Il file crontab può contenere dei commenti, del testo che non influenza in alcun modo il funzionamento di cron ma può essere utile per indicare a chi modifica il file delle informazioni aggiuntive sui comandi effettuati, la scelta sugli intervalli, etc. Le righe di commento devono essere precedute dal simbolo #. Ad esempio:

# Invoca lo script comando.sh ogni giorno alle 23:00
0 23 * * * comando.sh

Crontab globale

In molte implementazioni è inoltre presente una crontab "globale", un'unica lista nella quale sono specificati i task appartenenti ai vari utenti del sistema. Solitamente questa tabella è memorizzata nel file /etc/crontab.

La sintassi è quella già descritta sopra, ma per distinguere i comandi dei vari utenti è necessario specificare il nome dell'utente prima del comando. Ad esempio:

0 23 * * * apache comando.sh

eseguirà lo script comando.sh con l'utente apache, ogni giorno alle 23.

Altre implementazioni

Oltre al cron derivato dal lavoro di Vixie, esistono altri job scheduler che ne condividono la filosofia. Tra questi ricordiamo anacron, che si differenzia da cron in quanto può essere utilizzato anche su sistemi che non sono attivi 24 ore su 24.

Inoltre, in particolari circostanze cron è disabilitato per ragioni di sicurezza. Il caso più comune è quello degli hosting web condivisi. Tuttavia, anche le applicazioni web possono richiedere l'esecuzione periodica di task di manutenzione. Per ovviare al problema sono nati diversi job scheduler espressamente studiati per l'ambiente web. Essi sono genericamente indicati con il nome di web cron. Un web cron svolge le stesse funzioni della controparte Unix, con la differenza che esso opera all'interno dei confini dell'ambiente del web server sul quale è eseguito. Questa architettura è preferibile poiché permette di controllare l'allocazione delle risorse associate ai job invocati dal web cron alla stregua di una qualsiasi altra web application installata sul server, utilizzando quindi gli strumenti già installati per lo scopo.

Ti consigliamo anche