Crontab: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Etichette: Rimozione di avvisi di servizio Modifica visuale
m Annullate le modifiche di 89.150.34.30 (discussione), riportata alla versione precedente di Basilero
Riga 1:
{{titolo minuscolo}}
<code></code>
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 ====
#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 <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 ===
Se i comandi eseguiti da crontab producono output, normalmente il demone <code>cron</code> invia una mail al relativo utente contenente quell'output.
 
* Per rendere silente l'esecuzione di un particolare comando, è possibile redirigere il suo output a <code>[[/dev/null]]</code>. Per evitare di ricevere la mail da cron, aggiungere il testo seguente a tutti i comandi. Questo redirigerà lo ''[[standard output]]'' su <code>/dev/null</code> 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 <code>crontab</code>:
 
MAILTO=""
 
==Voci correlate==
* <code>[[at (Unix)|at]]</code>: esegue un comando a una data ora specificata
* <code>[[launchd]]</code>: il corrispondente di cron nei sistemi [[macOS]]/[[Apple Darwin]]
* <code>[[anacron]]</code>
 
==Collegamenti esterni==
* [http://www.computerhope.com/unix/ucrontab.htm Computer Hope] Informazioni sul comando crontab in Unix e [[Linux]]
* [http://www.opengroup.org/onlinepubs/009695399/utilities/crontab.html Specifiche Opengroup] - documentazione ufficiale [[UNIX 03]]
* {{cita web|http://www.adminschoice.com/crontab-quick-reference|Unix crontab - Quick Reference}}
* {{cita web|http://www.kalab.com/freeware/cron/cron.htm|Cron per Windows}}
* [http://fcron.free.fr/ fcron] - una versione in ([[GNU General Public License|GPL]])
* [http://www.bitfolge.de/pseudocron-en.html Pseudo-cron] Un simil-cron in [[PHP]]
* [http://www.webbasedcron.com WebBasedCron] - Un servizio cron [[Web-based]]
* [http://www.webcron.org Webcron] - Un servizio cron [[Web-based]] in italiano (e varie altre lingue)
* [http://www.artcava.net/Utilities/WebSchedule/WebScheduleInfo.aspx WebSchedule] - Un servizio cron [[Web-based]] in italiano
 
{{Comandi Unix}}
{{Portale|informatica}}
 
[[Categoria:Unix]]