crontab

Da Wikipedia, l'enciclopedia libera.

Nei sistemi operativi Unix e Unix-like, il comando crontab consente la pianificazione di comandi, ovvero consente la registrazione di questi presso il sistema per essere poi mandati in esecuzione periodicamente in maniera automatica dal sistema stesso. Lo stesso nome «crontab» si riferisce anche ai file utilizzati dal comando crontab come «registri» dei comandi pianificati.

Generalmente, crontab usa un demone, chiamato crond, che in quanto tale è costantemente in esecuzione in background e, una volta al minuto, legge i contenuti del registro dei comandi pianificati ed esegue quelli per cui si è esaurito il periodo di attesa. Un comando mandato in esecuzione da crontab viene chiamato cronjob.

I file crontab[modifica | modifica wikitesto]

I file crontab contengono la lista dei job e altre istruzioni per il demone di cron. Gli utenti possono avere dei file crontab individuali e spesso ci sono dei file crontab a livello di sistema (solitamente in /etc o in una sottodirectory di /etc) che possono essere utilizzati, ma modificati solo dagli amministratori di sistema.

Ogni linea di un file crontab segue un formato particolare, composta da una serie di campi separati da spazi o tabulazioni. I campi possono avere un solo valore o una serie di valori.

Operatori[modifica | modifica wikitesto]

Esistono diversi modi per specificare valori multipli in un campo:

  • L'operatore virgola («,») specifica una lista di valori, ad esempio: «1,3,4,7,8».
  • L'operatore trattino («-») specifica un intervallo di valori, ad esempio: «1-6», che equivale a «1,2,3,4,5,6».
  • L'operatore asterisco («*») specifica tutti i possibili valori di un campo. Ad esempio, un asterisco nel campo dell'ora è equivalente a «ogni ora».

Esiste anche un operatore supportato da alcune versioni estese del cron, l'operatore sbarra («/»), che può essere usato per saltare un certo numero di valori. Ad esempio, «*/3» nel campo dell'ora equivale a «0,3,6,9,12,15,18,21»; l'operatore «*» specifica «ogni ora», ma il «/3» indica che solo il primo, quarto, settimo e così via dei valori restituiti da «*» vengano usati.

Campi[modifica | modifica wikitesto]

I primi cinque campi su ogni riga specificano con che frequenza e quando eseguire un comando.

.---------------- [m]inute: minuto (0 - 59) 
|  .------------- [h]our: ora (0 - 23)
|  |  .---------- [d]ay [o]f [m]onth: giorno del mese (1 - 31)
|  |  |  .------- [mon]th: mese (1 - 12) OPPURE jan,feb,mar,apr... 
|  |  |  |  .---- [d]ay [o]f [w]eek: giorno della settimana (0 - 6) (domenica=0 o 7)  OPPURE sun,mon,tue,wed,thu,fri,sat 
|  |  |  |  |

*  *  *  *  *  comando da eseguire

Note:

  1. Per «giorno della settimana» (5º campo), sia 0 che 7 sono considerati il valore domenica.
  2. Se sia «giorno del mese» (3º campo) che «giorno della settimana» (5º campo) sono presenti sulla stessa linea, il comando viene eseguito quando almeno uno dei due è vero. Vedere l'esempio sotto.

Il sesto campo e i successivi (ossia, il resto della linea) specificano il comando da eseguire.

Esempi[modifica | modifica wikitesto]

Crontab per utente adm su un sistema AIX[modifica | modifica wikitesto]

#=================================================================
#      GENERAZIONE RAPPORTI ATTIVITA' DI SISTEMA
#  Tra le 8 e le 17 un rapporto ogni 20 minuti nei giorni feriali.
#  Un rapporto ogni ora di sabato e domenica.
#  Tra le 18 e le 7 un rapporto ogni ora nei giorni feriali.
#  Genera un riassunto alle 18:05 di ogni giorno feriale.
#=================================================================
0,20,40 8-17 * * 1-5 /usr/lib/sa/sa1 1200 3 &
0 * * * 0,6 /usr/lib/sa/sa1 &
0 18-7 * * 1-5 /usr/lib/sa/sa1 &
5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 3600 -ubcwyaq

Un errore comune[modifica | modifica wikitesto]

#Preparazione al cambio d'ora legale/solare
59 1 1-7 4 0 /root/shift_my_times.sh

Ad una prima occhiata si potrebbe pensare che questa linea di configurazione prepari il lancio dello script shift_my_times.sh alle 01:59 della prima domenica di aprile. Questo, tuttavia, non è corretto.

Diversamente dagli altri campi, il terzo e quinto vengono valutati con un'operazione OR. Quindi lo script sarà eseguito alle 01:59 ogni giorno dal 1º aprile al 7 aprile e in aggiunta ogni altra domenica di aprile. Il codice corretto sarebbe

#Preparazione al cambio d'ora legale/solare
59 1 1-7 4/12 ? /root/shift_my_times.sh

Un altro errore comune è quello di inserire caratteri % nel comando da eseguire: devono essere scritti con il relativo escape !

# Errore
1 2 3 4 5 touch ~/errore_`date "+%Y%m%d"`.txt
# Corretto
1 2 3 4 5 touch ~/corretto_$(date +\%Y\%m\%d).txt

Un altro errore ancora è di non andare a capo dopo l'ultima riga ("carriage return"). In questo caso l'ultima riga non viene considerata

Disabilitare l'Email di notifica[modifica | modifica wikitesto]

Se i comandi eseguiti da crontab producono output, normalmente il demone cron invia una mail al relativo utente contenente quell'output.

  • Per rendere silente l'esecuzione di un particolare comando, è possibile redirigere il suo output a /dev/null. Per evitare di ricevere la mail da cron, aggiungere il testo seguente a tutti i comandi. Questo redirigerà lo standard output su /dev/null e lo standard error sullo standard output, sopprimendo ogni messaggio di output (compresi quelli di errore):
>/dev/null 2>&1
  • Se si utilizza Vixie cron, è possibile bloccare l'invio delle email di notifica per tutti i job di un utente, aggiungendo la seguente linea al rispettivo crontab:
MAILTO=""

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica