Utilizzo del servizio di scheduling Cron: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
aggiunto paragrafo "Messaggi di output"
(aggiunto paragrafo "Messaggi di output")
(4 versioni intermedie di 2 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.
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 42: Riga 42:
Root è sempre abilitato all'utilizzo di <code>crontab</code>, indipendentemente dall'esistenza o meno di questi due file e dal loro contenuto.
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 52: Riga 53:
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/>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.
* <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.
* <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>'''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.
* <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>.
Riga 82: 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 185: 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 208: 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 273: 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>
: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.


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 305: Riga 310:
== Logging ==
== Logging ==


;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>per avere tutti i messaggi in <code>/var/log/cron.log</code> .
;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> .




;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/grub</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>
;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>


== Problemi comuni ==
== Problemi comuni ==
Riga 322: Riga 327:
: [[Utente:Ferdybassi|Ferdybassi]] (dopo l'estensione)
: [[Utente:Ferdybassi|Ferdybassi]] (dopo l'estensione)
: [[Utente:Stemby|Stemby]]
: [[Utente:Stemby|Stemby]]
|Numero_revisori = 3
: [[Utente:HAL 9000|HAL 9000]] 19:40, 31 mar 2015 (CEST)
|Numero_revisori = 4
|Estesa_da =  
|Estesa_da =  
: [[Utente:S3v|S3v]]
: [[Utente:S3v|S3v]]
6 999

contributi

Menu di navigazione