Crontab: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 1:
Un altro errore ancora è di non andare<code></code>are a capo dopo l'ultima riga ("carriage return"). In questo caso l'ultima riga non viene considerata
{{titolo minuscolo}}
Nei [[sistema operativo|sistemi operativi]] [[Unix]] e [[Unix-like]], il comando '''<code>crontab</code>''' consente la pianificazione di [[Linea di comando|comandi]], ovvero consente la registrazione di questi presso il sistema per essere poi mandati in [[esecuzione (informatica)|esecuzione]] [[periodico|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, <code>crontab</code> usa un [[demone (informatica)|demone]], chiamato '''<code>crond</code>''', 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 <code>crontab</code> viene chiamato '''cronjob'''.
 
== I file crontab ==
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 <code>/etc</code> o in una sottodirectory di <code>/etc</code>) che possono essere utilizzati, ma modificati solo dagli [[amministratore di sistema|amministratori di sistema]].
 
Ogni linea di un file crontab segue un formato particolare, composta da una serie di campi separati da spazi o [[tabulazione|tabulazioni]]. I campi possono avere un solo valore o una serie di valori.
 
=== Operatori ===
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 <code>cron</code>, 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 ===
I primi cinque campi su ogni riga specificano con che frequenza e quando eseguire un comando.
<code>
.---------------- [m]inute: minuto (0 - 59)
| .------------- [h]our: ora (0 - 23)
| | .---------- [d]ay of month: giorno del mese (1 - 31)
| | | .------- [mon]th: mese (1 - 12) OPPURE jan,feb,mar,apr...
| | | | .---- [w]eek day: giorno della settimana (0 - 6) (domenica=0 o 7) OPPURE sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * comando da eseguire
</code>
Note:
#Per «giorno della settimana» (5º campo), sia 0 che 7 sono considerati il valore domenica.
#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'[[#Un errore comune|esempio]] sotto.
 
Il sesto campo e i successivi (ossia, il resto della linea) specificano il comando da eseguire.
 
=== Esempi ===
==== Crontab per utente adm su un sistema AIX ====
 
#<nowiki>=================================================================</nowiki>
<nowiki>#</nowiki> GENERAZIONE RAPPORTI ATTIVITA' DI SISTEMA
<nowiki>#</nowiki> Tra le 8 e le 17 un rapporto ogni 20 minuti nei giorni feriali.
<nowiki>#</nowiki> Un rapporto ogni ora di sabato e domenica.
<nowiki>#</nowiki> Tra le 18 e le 7 un rapporto ogni ora nei giorni feriali.
<nowiki>#</nowiki> Genera un riassunto alle 18:05 di ogni giorno feriale.
<nowiki># =================================================================</nowiki>
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 ====
fare la caccah
 
Ad una prima occhiata si potrebbe pensare che questa linea di configurazione prepari il lancio dello script <code>shift_my_times.sh</code> 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]], in quanto il carattere % in denota una nuova linea.
 
another minute has passed.
# Errore
1 2 3 4 5 touch ~/errore_`date "+%Y%m%d"`.txt
<nowiki>#</nowiki> Corretto
1 2 3 4 5 touch ~/corretto_`date +\%Y\%m\%d`.txt
 
In questo esempio il carattere % denota l'inizio del STDIN per il comando cat
<syntaxhighlight lang="bash">
* * * * * cat - % trascorso un minuto
</syntaxhighlight>
 
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 ===