Utilizzo del servizio di scheduling Cron: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
aggiunto paragrafo "Messaggi di output"
mNessun oggetto della modifica
(aggiunto paragrafo "Messaggi di output")
(13 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
{{Versioni compatibili}}
==Introduzione al servizio di scheduling Cron==
== Introduzione al servizio di scheduling Cron ==
Alcuni processi devono essere eseguiti a determinati orari, un determinato numero di volte. Esempi possono essere i processi di backup che vengono lanciati ogni notte, oppure un analizzatore di log che deve girare ogni minuto.<br/>
Alcuni processi devono essere eseguiti a determinati orari, un determinato numero di volte. Esempi possono essere i processi di backup che vengono lanciati ogni notte, oppure un analizzatore di log che deve girare ogni minuto.<br/>
Questi processi devono girare un certo numero di volte oppure in determinati giorni; il resto del tempo essi stanno fermi fino a quando un utente non interagisce con essi e li richiama (con gli appositi comandi). Questi sono i casi in cui il demone CRON si rende utile. Vi permette di programmare (o "schedulare", come si dice in gergo) l'esecuzione di un lavoro ("job" o "cronjob") in qualsiasi momento desideriate, ogni minuto, ogni ora, giornalmente, settimanalmente, mensilmente, annualmente.
Questi processi devono girare un certo numero di volte oppure in determinati giorni; il resto del tempo essi stanno fermi fino a quando un utente non interagisce con essi e li richiama (con gli appositi comandi). Questi sono i casi in cui il demone CRON si rende utile. Vi permette di programmare (o "schedulare", come si dice in gergo) l'esecuzione di un lavoro ("job" o "cronjob") in qualsiasi momento desideriate, ogni minuto, ogni ora, giornalmente, settimanalmente, mensilmente, annualmente.


== Le basi ==
== Le basi ==
Cron viene lanciato in background all'avvio del sistema dallo script <code>/etc/init.d/cron</code> a cui punta il link presente in <code>/etc/rc2.d/</code>, sicché non c'è bisogno di lanciarlo manualmente. All'avvio Cron legge il file <code>/etc/crontab</code> per le voci (le cosiddette "entry") di sistema, i file contenuti nella directory <code>/etc/cron.d/</code> e i file in <code>/var/spool/cron/crontabs</code> per le voci relative agli utenti che si trovano nel file <code>/etc/passwd</code>. Tutti i job di ciascuna voce (crontab) sono caricati in memoria.
Cron viene lanciato in background all'avvio del sistema sicché non c'è bisogno di lanciarlo manualmente. All'avvio Cron legge il file <code>/etc/crontab</code> per le voci (le cosiddette "entry") di sistema, i file contenuti nella directory <code>/etc/cron.d/</code> e i file in <code>/var/spool/cron/crontabs</code> per le voci relative agli utenti che si trovano nel file <code>/etc/passwd</code>. Tutti i job di ciascuna voce (crontab) sono caricati nella memoria del demone Cron.


Ciascun utente, compreso root, ha il proprio file crontab nella directory <code>/var/spool/cron/crontabs/</code>; ogni crontab può contenere uno o più cronjobs.
Ciascun utente, compreso [[root]], ha il proprio file crontab nella directory <code>/var/spool/cron/crontabs/</code>; ogni crontab può contenere uno o più cronjobs.


Il demone Cron esegue diversi compiti:
Il [[demone]] Cron esegue diversi compiti:
* Ogni minuto controlla se vi sono stati cambiamenti nei file contenuti in <code>/etc/cron.d/</code> o nel file<code>/etc/crontab</code>. In questo caso aggiorna il modtime (vale a dire la data e l'ora dell'ultima modifica) per questi crontab e li ricarica in memoria;
* Controlla eventuali cambiamenti nei file contenuti in <code>/etc/cron.d/</code> o nel file<code>/etc/crontab</code>. In questo caso aggiorna il modtime (vale a dire la data e l'ora dell'ultima modifica) per questi crontab e li ricarica nella sua memoria interna;
* Monitora il comando <code>crontab</code> che si occupa, per ciascun utente, di modificare i lavori di Cron contenuti in <code>/var/spool/cron/crontabs</code>. Le modifiche effettuate con il comando <code>crontab</code> comportano, da parte di Cron, l'aggiornamento dei crontab in memoria e del loro modtime;
* Monitora il comando <code>crontab</code> che si occupa, per ciascun utente, di modificare i lavori di Cron contenuti in <code>/var/spool/cron/crontabs</code>. Le modifiche effettuate con il comando <code>crontab</code> comportano, da parte di Cron, l'aggiornamento dei crontab in memoria e del loro modtime;
* Confronta ogni minuto l'ora/data dei job contenuti in memoria con l'ora/data corrente per stabilire se il comando schedulato debba essere avviato oppure no;
* Confronta l'ora/data dei job contenuti in memoria (modtime) con l'ora/data corrente per stabilire se il comando schedulato debba essere avviato oppure no;


In base a questo modo di operare, non è necessario far ripartire Cron ogni volta che vengono effettuati dei cambiamenti tramite il comando <code>crontab</code>.
In base a questo modo di operare, non è necessario far ripartire Cron ogni volta che vengono effettuati dei cambiamenti tramite il comando <code>crontab</code>.
Riga 27: Riga 27:
</pre>
</pre>
I parametri significano:
I parametri significano:
* <code>'''-u'''</code> : questa opzione comunica al sistema il nome dell'utente che "possiede" il file. Se l'opzione <code>-u</code> è omessa, il sistema deduce per default che state usando il vostro crontab personale. NOTA: Il comando switch user (<code>su</code>) può confondere il <code>crontab</code>, così se siete nello switch <code>su</code> assicuratevi di utilizzare l'opzione <code>-u</code>.
* <code>'''-u'''</code> : questa opzione comunica al sistema il nome dell'utente che "possiede" il file. Se l'opzione <code>-u</code> è omessa, il sistema deduce per default che si sta operando sul crontab dell'utente che lancia il comando. NOTA: Il comando switch user (<code>su</code>) può confondere il <code>crontab</code>, così se siete nello switch <code>su</code> assicuratevi di utilizzare l'opzione <code>-u</code>.
* <code>'''-l'''</code> : questa opzione dice a <code>crontab</code> di elencare i file nello standard output, cioè di visualizzare il file.
* <code>'''-l'''</code> : questa opzione dice a <code>crontab</code> di elencare i file nello standard output, cioè di visualizzare il file.
* <code>'''-e'''</code> : questa opzione dice a <code>crontab</code> di editare il file. Cron usa l'editor definito dalle variabili <code>EDITOR</code> o <code>VISUAL</code>. Se nessuna di queste due variabili è definita, parte in automatico [[Impostare_l%27editor_predefinito_della_shell|l'editor di default]]. L'editor salva il file in <code>/tmp</code>; quando si esce dall'editor, il file è immediatamente salvato in <code>/var/spool/cron/crontabs</code> e viene aggiornato il campo data/ora. '''Questo è il comando principale da utilizzare se si vuole modificare il proprio file crontab per cancellare o inserirvi i lavori da assegnare a Cron.'''
* <code>'''-e'''</code> : questa opzione dice a <code>crontab</code> di editare il file. Cron usa l'editor definito dalle variabili <code>EDITOR</code> o <code>VISUAL</code>. Se nessuna di queste due variabili è definita, parte in automatico [[Impostare_l%27editor_predefinito_della_shell|l'editor di default]]. L'editor salva il file in <code>/tmp</code>; quando si esce dall'editor, il file è immediatamente salvato in <code>/var/spool/cron/crontabs</code> e viene aggiornato il campo data/ora. '''Questo è il comando principale da utilizzare se si vuole modificare il proprio file crontab per cancellare o inserirvi i lavori da assegnare a Cron.'''
Riga 33: Riga 33:
* <code>'''file'''</code> : inserisce il contenuto del file nel crontab dell'utente specificato tramite l'opzione '-u'. Se non viene specificato nessun utente, allora il contenuto del file sarà inserito nel crontab dell'utente che lancia il comando (vedi anche: [[Utilizzo_del_servizio_di_scheduling_Cron#Importare_un_file_crontab | Importare un file crontab]])
* <code>'''file'''</code> : inserisce il contenuto del file nel crontab dell'utente specificato tramite l'opzione '-u'. Se non viene specificato nessun utente, allora il contenuto del file sarà inserito nel crontab dell'utente che lancia il comando (vedi anche: [[Utilizzo_del_servizio_di_scheduling_Cron#Importare_un_file_crontab | Importare un file crontab]])


==cron.allow & cron.deny==
== cron.allow & cron.deny ==
In un sistema Debian, di default, tutti gli utenti, oltre root, possono eseguire il comando <code>crontab</code>.<br/>
In un sistema Debian, di default, tutti gli utenti, oltre root, possono eseguire il comando <code>crontab</code>.<br/>
Questo comportamento può essere modificato attraverso la creazione di due file:
Questo comportamento può essere modificato attraverso la creazione di due file:
Riga 40: Riga 40:


Se entrambi i file sono presenti, verrà preso in considerazione solo il file <code>/etc/cron.allow</code>.<br/>
Se entrambi i file sono presenti, verrà preso in considerazione solo il file <code>/etc/cron.allow</code>.<br/>
Root è sempre abilitato all'utilizzo di <code>crontab</code>, indipendentemente dall'esistenza o meno di questi due file.
Root è sempre abilitato all'utilizzo di <code>crontab</code>, indipendentemente dall'esistenza o meno di questi due file e dal loro contenuto.


==Voci in un file crontab==
== Voci in un file crontab ==
Solo due tipi di voci sono permesse in un file crontab: i settaggi ambientali (Crontab Environmental settings) e i settaggi di comando (Crontab Command settings)
Solo due tipi di voci sono permesse in un file crontab: i settaggi ambientali (Crontab Environmental settings) e i settaggi di comando (Crontab Command settings).
===Crontab Environmental settings===
 
=== Crontab Environmental settings ===
I settaggi ambientali utilizzano la seguente forma:
I settaggi ambientali utilizzano la seguente forma:
<pre>
<pre>
Riga 51: Riga 52:
che, per motivi di leggibilità, dovrebbero essere inseriti in testa al file generato dal comando <code>crontab</code>.<br/>
che, per motivi di leggibilità, dovrebbero essere inseriti in testa al file generato dal comando <code>crontab</code>.<br/>
Le variabili a cui è possibile assegnare un valore sono:  
Le variabili a cui è possibile assegnare un valore sono:  
* <code>'''SHELL'''</code>: se non assegnata viene settata automaticamente da Cron a <code>/bin/sh</code> .<br/>
* <code>'''SHELL'''</code>: se non assegnata viene settata automaticamente da Cron a <code>/bin/sh</code> .<br/>Poiché in Debian l'interprete dei comandi a cui punta <code>/bin/sh</code> è <code>/bin/dash</code>, accertarsi che la sintassi dei comandi sia compatibile con '''dash'''; altrimenti modificare la variabile SHELL in maniera conforme all'interprete utilizzato, ad esempio:<pre>SHELL=/bin/bash</pre>Questa modifica potrebbe essere necessaria nel caso in cui si voglia eseguire attraverso Cron uno [[script]] Bash.
:Poiché in Debian l'interprete dei comandi a cui punta <code>/bin/sh</code> è <code>/bin/dash</code>, accertarsi che la sintassi dei comandi sia compatibile con '''dash'''; altrimenti modificare la variabile SHELL in maniera conforme all'interprete utilizzato, ad esempio:
* <code>'''PATH'''</code>: anche questa variabile, se non le viene assegnato un valore, è settata automaticamente da Cron a <code>/usr/bin:/bin</code> . È utile cambiare questo valore se i comandi contenuti all'interno di uno script lanciato da ''Cron'' utilizzano a loro volta comandi non presenti in ''/usr/bin'' o ''/bin''oppure se si vuole inserire un comando senza specificarne il [[path]]. Per i comandi in <code>/usr/bin</code> e <code>/bin</code>, presenti cioè nel path di default, non è necessario specificarne il path completo.
:<pre>SHELL=/bin/bash</pre>
* <code>'''PATH'''</code>: anche questa variabile, se non le viene assegnato un valore, è settata automaticamente da Cron a <code>/usr/bin:/bin</code> . È utile cambiare questo valore solo se si vuole inserire un comando senza specificarne il path. Per i comandi in <code>/usr/bin</code> e <code>/bin</code>, presenti cioè nel path di default, non è necessario specificarne il path completo.
* <code>'''LOGNAME'''</code>: contiene il login name dell'utente che esegue il comando <code>crontab</code>. Non può essere cambiata.
* <code>'''LOGNAME'''</code>: contiene il login name dell'utente che esegue il comando <code>crontab</code>. Non può essere cambiata.
* <code>'''HOME'''</code>: contiene il path della home directory associata all'utente che esegue <code>crontab</code>.
* <code>'''HOME'''</code>: contiene il path della home directory associata all'utente che esegue <code>crontab</code>.
* <code>'''MAILTO'''</code>: di default Cron invia un'email con l'output dei comandi presenti nel crontab all'utente che ne è proprietario.
* <code>'''MAILTO'''</code>: di default Cron invia un'email con l'output dei comandi presenti nel crontab all'utente che ne è proprietario.<br/>
#se questa variabile è settata, il demone Cron invierà un'email, con l'output del/dei comando/comandi specificati in <code>crontab</code>, all'utente specificato. È possibile specificare più utenti separandoli con una virgola;
#se questa variabile è settata, il demone Cron invierà un'email, con l'output del/dei comando/comandi specificati in <code>crontab</code>, all'utente specificato. È possibile specificare più utenti separandoli con una virgola;
#se la variabile è settata a "", allora non verranno inviate email;<br/>
#se la variabile è settata a "", allora non verranno inviate email;<br/>
#se la variabile non è specificata, verrà inviata un'email all'utente a cui appartiene il crontab.<br/>
#se la variabile non è specificata, verrà inviata un'email all'utente a cui appartiene il crontab.<br/>La seguente riga mostra la variabile MAILTO settata ad uno specifico utente (luca):<pre># spedisce tutti gli output all'utente *luca*&#10;MAILTO=luca</pre>mentre la successiva riga informa Cron di non inviare email:<pre># non viene inviata nessuna email &#10;MAILTO=""</pre>ovviamente, affinché Cron possa inviare con successo le email, bisogna avere un MTA installato e funzionante sulla propria macchina.
La seguente riga mostra la variabile MAILTO settata ad uno specifico utente (luca):
<pre>
# spedisce tutti gli output all'utente *luca*
MAILTO=luca
</pre>
mentre la successiva riga informa Cron di non inviare email:
<pre>
# non viene inviata nessuna email
MAILTO=""
</pre>
ovviamente, affinché Cron possa inviare con successo le email, bisogna avere un MTA installato e funzionante sulla propria macchina.


=== Crontab Command settings ===
=== Crontab Command settings ===
Riga 95: Riga 83:
|  |  .---------- [d]ay [o]f [m]onth: giorno del mese (1 - 31)
|  |  .---------- [d]ay [o]f [m]onth: giorno del mese (1 - 31)
|  |  |  .------- [mon]th: mese (1 - 12) OPPURE jan,feb,mar,apr...  
|  |  |  .------- [mon]th: mese (1 - 12) OPPURE jan,feb,mar,apr...  
|  |  |  |  .---- [d]ay [o]f [w]eek: giorno della settimana (0 - 6) (domenica=0 or 7)  OPPURE sun,mon,tue,wed,thu,fri,sat  
|  |  |  |  .---- [d]ay [o]f [w]eek: giorno della settimana (0 - 7) (la domenica vale 0 o 7)  OPPURE sun,mon,tue,wed,thu,fri,sat  
|  |  |  |  |
|  |  |  |  |


Riga 106: Riga 94:
Le righe contenenti i command settings sono costituite da campi separati da spazi o caratteri di tabulazione.<br/>
Le righe contenenti i command settings sono costituite da campi separati da spazi o caratteri di tabulazione.<br/>
I primi cinque campi possono contenere un numero, un intervallo di valori, stringhe particolari o un asterisco (*). Quest'ultimo sta a indicare ogni possibile valore ammesso dell'intervallo; quindi un asterisco nel terzo campo indica che il comando verrà eseguito ogni giorno.<br/>
I primi cinque campi possono contenere un numero, un intervallo di valori, stringhe particolari o un asterisco (*). Quest'ultimo sta a indicare ogni possibile valore ammesso dell'intervallo; quindi un asterisco nel terzo campo indica che il comando verrà eseguito ogni giorno.<br/>
Se tutti i primi cinque campi contengono un asterisco, il comando verrà eseguito ogni volta che il demone Cron legge i file crontab in memoria, cioè ogni minuto.<br/>
Se tutti i primi cinque campi contengono un asterisco, il comando verrà eseguito ogni minuto.<br/>
Questo è un semplice esempio di crontab editabile attraverso il comando <code>crontab -e</code> :
Questo è un semplice esempio di crontab editabile attraverso il comando <code>crontab -e</code> :
<pre>
<pre>
Riga 127: Riga 115:


*Esempio 2
*Esempio 2
<pre>
*/10 * * * * /comando/da/eseguire
</pre>
il comando verrà eseguito ogni 10 minuti, quando i minuti sono 00, 10, 20, 30, 40 e 50.
*Esempio 3
<pre>
<pre>
30 * 1-7 * * /comando/da/eseguire
30 * 1-7 * * /comando/da/eseguire
Riga 132: Riga 126:
il comando verrà eseguito i primi sette giorni di ogni mese, ad ogni ora e quando i minuti valgono 30.
il comando verrà eseguito i primi sette giorni di ogni mese, ad ogni ora e quando i minuti valgono 30.


*Esempio 3
*Esempio 4
<pre>
<pre>
00 */2 15 * * /comando/da/eseguire
00 */2 15 * * /comando/da/eseguire
Riga 138: Riga 132:
il comando verrà eseguito il quindicesimo giorno di ogni mese, ogni due ore.
il comando verrà eseguito il quindicesimo giorno di ogni mese, ogni due ore.


*Esempio 4
*Esempio 5
<pre>
<pre>
00 1-9/2 1 5 * /comando/da/eseguire
00 1-9/2 1 5 * /comando/da/eseguire
Riga 144: Riga 138:
il comando viene eseguito il primo maggio alle 1,00 - 3,00 - 5,00 - 7,00 - 9,00. Cioè ogni due ore dalle 1,00 alle 9,00.
il comando viene eseguito il primo maggio alle 1,00 - 3,00 - 5,00 - 7,00 - 9,00. Cioè ogni due ore dalle 1,00 alle 9,00.


*Esempio 5
*Esempio 6
<pre>
<pre>
00 1-10/2 1 5 * /comando/da/eseguire
00 1-10/2 1 5 * /comando/da/eseguire
Riga 150: Riga 144:
il comando viene eseguito il primo maggio alle 1,00 - 3,00 - 5,00 - 7,00 - 9,00. Cioè ogni due ore dalle 1,00 alle 10,00. Si noti come l'ultimo valore utile dell'intervallo non coincida, in questo caso, con l'ora in cui viene fatta partire l'ultima esecuzione giornaliera del comando.
il comando viene eseguito il primo maggio alle 1,00 - 3,00 - 5,00 - 7,00 - 9,00. Cioè ogni due ore dalle 1,00 alle 10,00. Si noti come l'ultimo valore utile dell'intervallo non coincida, in questo caso, con l'ora in cui viene fatta partire l'ultima esecuzione giornaliera del comando.


*Esempio 6
*Esempio 7
<pre>
<pre>
00 13 2,8,14 * * /comando/da/eseguire
00 13 2,8,14 * * /comando/da/eseguire
Riga 156: Riga 150:
il comando verrà eseguito il secondo, l'ottavo e il quattordicesimo giorno di ogni mese alle 13.00
il comando verrà eseguito il secondo, l'ottavo e il quattordicesimo giorno di ogni mese alle 13.00


*Esempio 7
*Esempio 8
<pre>
<pre>
30 13 1-15 4,10 * /comando/da/eseguire
30 13 1-15 4,10 * /comando/da/eseguire
Riga 162: Riga 156:
il comando verrà eseguito i primi quindici giorni di aprile e ottobre alle 13,30.
il comando verrà eseguito i primi quindici giorni di aprile e ottobre alle 13,30.


*Esempio 8
*Esempio 9
<pre>
<pre>
*/30 13,20 * 1-7,9-12 1-5 /comando/da/eseguire
*/30 13,20 * 1-7,9-12 1-5 /comando/da/eseguire
Riga 168: Riga 162:
il comando verrà eseguito nei giorni feriali (da lunedì a venerdì) di tutti i mesi tranne agosto, alle 13,00 - 13,30 - 20,00 - 20,30.
il comando verrà eseguito nei giorni feriali (da lunedì a venerdì) di tutti i mesi tranne agosto, alle 13,00 - 13,30 - 20,00 - 20,30.


*Esempio 9
*Esempio 10
<pre>
<pre>
00 14,19 1-15 * 5 /comando/da/eseguire
00 14,19 1-15 * 5 /comando/da/eseguire
Riga 185: Riga 179:
</pre>
</pre>
* Esempio 11
* Esempio 11
Quest'altro esempio mostra come eseguire un comando alle 20,00 nei giorni che vanno dal 5 al 10 dei ogni mese e solo se questi giorni corrispondono a martedì o venerdì:
Quest'altro esempio mostra come eseguire un comando alle 20,00 nei giorni che vanno dal 5 al 10 di ogni mese e solo se questi giorni corrispondono a martedì o venerdì:
<pre>
<pre>
00 20 5-10 * * [ $(/bin/date '+\%u') -eq 2 -o $(/bin/date '+\%u') -eq 5 ] && /comando/da/eseguire
00 20 5-10 * * [ $(/bin/date '+\%u') -eq 2 -o $(/bin/date '+\%u') -eq 5 ] && /comando/da/eseguire
Riga 192: Riga 186:
Consultare le manpages dei comandi '''date''' e '''test''' per ottenere informazioni sul loro funzionamento.
Consultare le manpages dei comandi '''date''' e '''test''' per ottenere informazioni sul loro funzionamento.


===Stringhe speciali===
=== Stringhe speciali ===
Al posto dei primi cinque campi è possibile inserire particolari stringhe che il demone Cron interpreta come valori corretti per i campi data/ora. Vediamole:
Al posto dei primi cinque campi è possibile inserire particolari stringhe che il demone Cron interpreta come valori corretti per i campi data/ora. Vediamole:
<pre>
<pre>
Riga 204: Riga 198:
   @daily        Lancia il comando una volta al giorno. Uguale a "0 0 * * *"
   @daily        Lancia il comando una volta al giorno. Uguale a "0 0 * * *"
   @midnight      (come @daily)
   @midnight      (come @daily)
   @hourly        Lancia il comando una volta all'ora. Uguale a "0 * * * *
   @hourly        Lancia il comando una volta all'ora. Uguale a "0 * * * *"
</pre>
</pre>
in base a questa tabella sono perfettamente ammissibili le seguenti righe per il file crontab:
in base a questa tabella sono perfettamente ammissibili le seguenti righe per il file crontab:
Riga 215: Riga 209:
</pre>
</pre>
con cui il comando verrà eseguito ogni mese; in particolare il primo giorno di ogni mese, a mezzanotte.
con cui il comando verrà eseguito ogni mese; in particolare il primo giorno di ogni mese, a mezzanotte.
=== Messaggi di output ===
L'esecuzione di comandi o script può comportare l'invio allo standard output o allo standard error dei loro messaggi d'esecuzione.<br/> Normalmente tali messaggi vengono inviati allo schermo ma, nel caso vengano eseguiti tramite ''Cron'', l'output sarà reindirizzato attraverso l'[[MTA]] di sistema all'utente specificato tramite la variabile ''MAILTO''.<br/>
Questo può portare all'invio di messaggi con output indesiderato, o perché totalmente non richiesto per un determinato cronjob o perché si desidera soltanto la notifica dei messaggi d'errore nel caso il comando abbia avuto problemi.<br/>
Per operare su questo aspetto si può reindirizzare l'output del comando specificato in ''Cron'' come si farebbe normalmente per la shell.
* Notifica solo dei messaggi d'errore.<br/>Si reindirizza lo standard output verso "/dev/null", ad esempio:<pre>00 3 1 7 * /comando/da/eseguire > /dev/null</pre>
* Soppressione totale dei messaggi.<br/>Si reindirizza sia lo standard output che lo standard error verso "/dev/null", ad esempio:<pre>00 3 1 7 * /comando/da/eseguire > /dev/null 2>&1</pre>Si noti che, in questo caso, l'impostazione:<pre>MAILTO = ""</pre> avrebbe effetto su tutti i cronjob e non solo su quello voluto.


=== Esempio di crontab ===
=== Esempio di crontab ===
Riga 234: Riga 235:


== Crontab di sistema: /etc/crontab ==
== Crontab di sistema: /etc/crontab ==
Anche la nostra macchina ha il proprio file crontab in cui sono specificati i comandi di sistema da lanciare ad intervalli regolari. Il file è contenuto in <code>/etc/crontab</code> e viene letto da Cron ogni minuto.<br/>
Anche la nostra macchina ha il proprio file crontab in cui sono specificati i comandi di sistema da lanciare ad intervalli regolari. Il file è contenuto in <code>/etc/crontab</code> e le sue modifiche sono automaticamente intercettate da Cron.<br/>
In questo file è utilizzato un campo aggiuntivo, dopo i primi cinque campi data/ora e prima del comando, che specifica l'utente con i cui permessi verrà eseguito il comando.
In questo file è utilizzato un campo aggiuntivo, dopo i primi cinque campi data/ora e prima del comando, che specifica l'utente con i cui permessi verrà eseguito il comando.


Riga 280: Riga 281:
La data/ora in cui vengono eseguiti gli script contenuti in queste directory è quella specificata nel file <code>/etc/crontab</code>.
La data/ora in cui vengono eseguiti gli script contenuti in queste directory è quella specificata nel file <code>/etc/crontab</code>.


*<code>'''/etc/cron.d/'''</code>: in questa directory sono vi sono script ma file nel formato di <code>crontab</code>. Qui il sistema specifica i lavori da passare a Cron per intervalli temporali diversi dall'ora o dal giorno o dal mese o dalla settimana.<br/>
*<code>'''/etc/cron.d/'''</code>: in questa directory sono vi sono script ma file nel formato di <code>crontab</code>. Qui il sistema specifica i lavori da passare a Cron per intervalli temporali diversi dall'ora o dal giorno o dal mese o dalla settimana.<br/>Le righe presenti nei file contenuti in quest'ultima directory devono seguire il seguente schema:<pre>* * * * * utente comando</pre>Le modifiche ai file di questa directory vengono automaticamente intercettate da Cron e, come per il file <code>/etc/crontab</code>, anche per i file contenuti in questa directory viene specificato l'utente con i cui permessi deve essere eseguito il comando.<br/> Anacron non esegue i cronjob contenuti in questa directory.
:Le righe presenti nei file contenuti in quest'ultima directory devono seguire il seguente schema:
:<pre>* * * * * utente comando</pre>
:Questi file vengono letti da Cron ogni minuto.<br/>
:Come per il file <code>/etc/crontab</code>, anche per i file contenuti in questa directory viene specificato l'utente con i cui permessi deve essere eseguito il comando.


Tutte queste cinque directory, per una questione di pulizia del sistema, non dovrebbero essere utilizzate per inserirvi script da parte degli utenti, anche se nulla vieta di farlo. Le controindicazioni sono quelle di "dimenticarsi" qualche script o di lanciare, coi permessi di root, qualche comando che necessiterebbe solo dei semplici permessi utente.<br/>
Tutte queste cinque directory, per una questione di pulizia del sistema, non dovrebbero essere utilizzate per inserirvi script da parte degli utenti, anche se nulla vieta di farlo. Le controindicazioni sono quelle di "dimenticarsi" qualche script o di lanciare, coi permessi di root, qualche comando che necessiterebbe solo dei semplici permessi utente.<br/>
Riga 303: Riga 300:


== Importare un file crontab ==
== Importare un file crontab ==
Questa procedura è utile per importare un file in cui si è precedentemente salvato il contenuto di un file crontab oppure per importare un file editato a mano attraverso un qualsiasi altro editor, testuale o grafico:<br/>
Questa procedura è utile per importare un file in cui si è precedentemente salvato il contenuto di un file crontab oppure per importare un file editato a mano attraverso un qualsiasi altro editor, testuale o grafico:
<pre>$ crontab mycrontab</pre>
<pre>$ crontab mycrontab</pre>
in questo modo il contenuto di <code>mycrontab</code> verrà inserito nel crontab dell'utente che lancia il comando.<br/>
in questo modo il contenuto di <code>mycrontab</code> verrà inserito nel crontab dell'utente che lancia il comando.<br/>
Riga 311: Riga 308:
'''Attenzione''': il file crontab, se presente, verrà sovrascritto!
'''Attenzione''': il file crontab, se presente, verrà sovrascritto!


== File di log ==
== Logging ==
Nel caso si abbiano problemi nel far funzionare correttamente il servizio di scheduling, si può in qualsiasi momento  dare un'occhiata al file di log <code>/var/log/syslog</code>  in cui il demone Cron invia i propri messaggi di sistema.
 
;File di log:Nel caso si abbiano problemi nel far funzionare correttamente il servizio di scheduling, si può in qualsiasi momento  dare un'occhiata al file di log <code>/var/log/syslog</code>  in cui il demone Cron invia i propri messaggi di sistema.<br/>Alternativamente si può fare in modo da avere un file di log separato per contenere i messaggi di Cron.<br/>Basta decommentare la riga del file <code>/etc/rsyslog.conf</code> :<pre>cron.*                          /var/log/cron.log</pre>e riavviare "rsyslog":<pre># service rsyslog restart</pre>per avere tutti i messaggi in <code>/var/log/cron.log</code> .
 


Alternativamente si può fare in modo da avere un file di log separato per contenere i messaggi di Cron.<br/>
;Log level:Il livello di logging (cioè le informazioni che vengono scritte nei log prodotti da ''Cron'') può essere impostato nel file <code>/etc/default/cron</code> agendo sulla direttiva "EXTRA_OPTS". Ad esempio:<pre>EXTRA_OPTS="-L 8"</pre>I valori possibili sono:<pre>0    nessun log a meno che non avvenga un errore &#10;1    avvio del cronjob &#10;2    fine del cronjob &#10;4    log del cronjob con stato d'uscita diverso da 0 &#10;8    log anche dei processi-figlio del processo eseguito da Cron &#10;</pre>I valori possono essere sommati se si vuol loggare più di un evento.<br/>Con:<pre>EXTRA_OPTS="-L 15"</pre>si ottiene la massima "verbosità" del log.<br/>Per rendere effettive queste modifiche, servirà riavviare ''Cron'':<pre># service cron restart</pre>
Basta decommentare la riga del file <code>/etc/rsyslog.conf</code> :
 
<pre>
== Problemi comuni ==
cron.*                          /var/log/cron.log
;<u>Lo script viene eseguito normalmente ma non attraverso Cron</u>:Il problema può essere in larga parte dovuto a due fattori: lo script fa uso di una sintassi diversa da quella usata da dash (leggere a tal proposito il paragrafo relativo ai "Crontab Environmental settings" e, in particolare, l'uso della variabile SHELL) oppure lo script esegue comandi che non ricadono all'interno dei percorsi definiti dalla variabile PATH. In quest'ultimo caso si può far ricorso al comando "strace" (presente nel pacchetto omonimo):<pre>$ strace -f -e trace=execve ./nomescript</pre> che mostrerà il percorso dei comandi eseguiti dallo script. Modificare, se necessario, la variabile PATH affinché preveda percorsi diversi da <code>/usr/bin</code> o <code>/bin</code> .
</pre>
per avere tutti i messaggi in <code>/var/log/cron.log</code> .


==Note==
==Note==
Riga 328: Riga 325:
|Verificata_da =
|Verificata_da =
: [[Utente:S3v|S3v]]
: [[Utente:S3v|S3v]]
|Numero_revisori = 1
: [[Utente:Ferdybassi|Ferdybassi]] (dopo l'estensione)
: [[Utente:Stemby|Stemby]]
: [[Utente:HAL 9000|HAL 9000]] 19:40, 31 mar 2015 (CEST)
|Numero_revisori = 4
|Estesa_da =  
|Estesa_da =  
: [[Utente:S3v|S3v]]
: [[Utente:S3v|S3v]]
}}
}}
----
 
[[Categoria:Servizi di sistema]]
[[Categoria:Servizi di sistema]]
6 999

contributi

Menu di navigazione