Logrotate: configurare la rotazione automatica dei log: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
m
nessun oggetto della modifica
(riscrittura totale)
mNessun oggetto della modifica
 
(5 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
{{Stub}}{{Versioni compatibili}}
{{Versioni compatibili}}
== Introduzione ==
== Introduzione ==
Logrotate è un'utility che facilita l'amministrazione di quei sistemi che generano un elevato numero di file di log consentendo la loro rotazione, compressione, rimozione e invio tramite email, ma si rende anche utile nella gestione dei file di log generati da script o servizi personalizzati.<br/>
Logrotate è un'utility che facilita l'amministrazione di quei sistemi che generano un elevato numero di file di [[log]] consentendo la loro rotazione, compressione, rimozione e invio tramite email, ma si rende anche utile nella gestione dei file di log generati da [[script]] o servizi personalizzati.<br/>
La sua installazione è pertanto fortemente consigliata sul nostro sistema in quanto impedisce sia che i file di log raggiungano dimensioni ragguardevoli intasando la directory <code>/var/log</code> sia che diventino talmente corposi da non permetterne un'agevole consultazione.<br/>
La sua installazione è pertanto fortemente consigliata sul nostro sistema in quanto impedisce sia che i file di log raggiungano dimensioni ragguardevoli intasando la directory <code>/var/log</code> sia che diventino talmente corposi da non permetterne un'agevole consultazione.<br/>


Se <code>logrotate</code> è già installato sulla nostra macchina, si può vederne il suo operato aprendo una [[shell]] e eseguendo:
Se <code>logrotate</code> è già installato sulla nostra macchina, si possono vedere i risultati del suo funzionamento aprendo una [[shell]] ed eseguendo:
<pre>$ ls -l /var/log</pre>
<pre>$ ls -l /var/log</pre>
in questo modo si può notare come i log di sistema vengano periodicamente ruotati e compressi in modo automatico secondo delle regole che vedremo tra breve.
in questo modo si può notare come i log di sistema vengano periodicamente ruotati e compressi in modo automatico secondo delle regole che vedremo tra breve.
Riga 23: Riga 23:
Il funzionamento, di per sé, è molto semplice: ogni giorno viene eseguito dal [[demone]] [[cron]] lo script <code>/etc/cron.daily/logrotate</code> che si occupa di effettuare le rotazioni in base al contenuto del file <code>/var/lib/logrotate/status</code> (timestamp) e alle impostazioni presenti nei file di configurazione <code>/etc/logrotate.conf</code> .<br/>
Il funzionamento, di per sé, è molto semplice: ogni giorno viene eseguito dal [[demone]] [[cron]] lo script <code>/etc/cron.daily/logrotate</code> che si occupa di effettuare le rotazioni in base al contenuto del file <code>/var/lib/logrotate/status</code> (timestamp) e alle impostazioni presenti nei file di configurazione <code>/etc/logrotate.conf</code> .<br/>
Questo file di configurazione contiene, tra le altre cose, una direttiva che indica a <code>logrotate</code> di leggere anche i file contenuti nella directory <code>/etc/logrotate.d/</code> e di considerarli come file di configurazione aggiuntivi.<br/>
Questo file di configurazione contiene, tra le altre cose, una direttiva che indica a <code>logrotate</code> di leggere anche i file contenuti nella directory <code>/etc/logrotate.d/</code> e di considerarli come file di configurazione aggiuntivi.<br/>
Per facilitare la gestione, quindi, la configurazione di <code>logrotate</code> è suddivisa di default tra il file <code>logrotate.conf</code> e i file presenti in <code>logrotate.d</code> ; la cosa importante da tener sempre presente, però, è che il tutto può essere visto come un unico grande file di configurazione che parte con le righe di <code>logrotate.conf</code>, prosegue con il contenuto dei file di <code>logrotate.d</code> (e di ogni altro file/directory specificato con l'opzione "include") e termina con le ultime righe di <code>logrotate.conf</code> . Visualizzate mentalmente questo file immaginario quando si andranno a scrivere le opzioni locali o globali, questo consentirà di comprendere anche perché l'ordine con cui vengono scritte le linee di configurazione è particolarmente importante.
Per facilitare la gestione, quindi, la configurazione di <code>logrotate</code> è suddivisa di default tra il file <code>logrotate.conf</code> e i file presenti in <code>logrotate.d</code> ; la cosa importante da tener sempre presente è che il tutto può essere visto come un unico grande file di configurazione che parte con le righe di <code>logrotate.conf</code>, prosegue con il contenuto dei file di <code>logrotate.d</code> (e di ogni altro file/directory specificato con l'opzione "include") e termina con le ultime righe di <code>logrotate.conf</code> .<br/>
Visualizzate mentalmente questo unico file immaginario quando si andranno a scrivere le opzioni locali o globali, questo consentirà di comprendere anche perché l'ordine con cui vengono scritte le linee di configurazione è particolarmente importante.


La rotazione prevede la cancellazione dell'ultimo file ruotato mentre il suo posto viene preso dal penultimo file e così via. Ad esempio se all'inizio si ha il file di log "miolog" con tre rotazioni settimanali si avrà:
La rotazione prevede la cancellazione dell'ultimo file ruotato mentre il suo posto viene preso dal penultimo file e così via. Ad esempio, se all'inizio si ha il file di log "miolog" con tre rotazioni settimanali si avrà:
;<span style="color:#7e1b4e">prima settimana</span>:miolog viene ruotato e rinominato in miolog.1<br/>Viene creato un nuovo file miolog<br/>'''Risultato:''' miolog, miolog.1
;<span style="color:#7e1b4e">prima settimana</span>:''miolog'' viene ruotato e rinominato in ''miolog.1''<br/>Viene creato un nuovo file ''miolog''<br/>'''Risultato:''' ''miolog, miolog.1''
;<span style="color:#7e1b4e">seconda settimana</span>:miolog.1 viene rinominato in miolog.2<br/>miolog viene rinominato in miolog.1<br/>Viene creato un nuovo file miolog.<br/>'''Risultato:''' miolog, miolog.1, miolog.2
;<span style="color:#7e1b4e">seconda settimana</span>:''miolog.1'' viene rinominato in ''miolog.2''<br/>''miolog'' viene rinominato in ''miolog.1''<br/>Viene creato un nuovo file ''miolog''<br/>'''Risultato:''' ''miolog, miolog.1, miolog.2''
;<span style="color:#7e1b4e">terza settimana</span>:miolog.2 viene rinominato in miolog.3<br/>miolog.1 viene rinominato in miolog.2<br/>miolog viene rinominato in miolog.1<br/>'''Risultato:''' miolog, miolog.1, miolog.2, miolog.3
;<span style="color:#7e1b4e">terza settimana</span>:''miolog.2'' viene rinominato in ''miolog.3''<br/>''miolog.1'' viene rinominato in ''miolog.2''<br/>''miolog'' viene rinominato in ''miolog.1''<br/>'''Risultato:''' ''miolog, miolog.1, miolog.2, miolog.3''
;<span style="color:#7e1b4e">rotazioni successive</span>:miolog.3 è rinominato in miolog.4 e viene cancellato<br/>miolog.2 viene rinominato in miolog.3<br/>miolog.1 viene rinominato in miolog.2<br/>miolog viene rinominato in miolog.1<br/>'''Risultato:''' miolog, miolog.1, miolog.2, miolog.3
;<span style="color:#7e1b4e">rotazioni successive</span>:''miolog.3'' è rinominato in ''miolog.4'' e viene cancellato<br/>''miolog.2'' viene rinominato in ''miolog.3''<br/>''miolog.1'' viene rinominato in ''miolog.2''<br/>''miolog'' viene rinominato in ''miolog.1''<br/>'''Risultato:''' ''miolog, miolog.1, miolog.2, miolog.3''


Si può fare in modo da inviare l'ultimo log via email (prima di cancellarlo), in questo caso verrà inviato in formato non compresso. Oppure si può salvarlo o anche passarlo a dei comandi di scripting per manipolarlo prima della sua cancellazione.
Si può fare in modo da inviare l'ultimo log via email (prima di cancellarlo), in questo caso verrà inviato in formato non compresso. Oppure si può salvarlo o anche passarlo a dei comandi di scripting per manipolarlo prima della sua cancellazione.
Riga 35: Riga 36:
Descriviamo ora brevemente i principali file di cui si serve <code>logrotate</code>.
Descriviamo ora brevemente i principali file di cui si serve <code>logrotate</code>.


=== /etc/cron.daily/logrotate ===
=== <code>/etc/cron.daily/logrotate</code> ===
Questo script ha il seguente contenuto:
Questo script ha il seguente contenuto:
<pre>
<pre>
Riga 64: Riga 65:
</pre>
</pre>
serve a specificare il percorso in cui si trovano gli altri file di configurazione aggiuntivi per <code>logrotate</code>. Il normale flusso del file viene interrotto, si leggono i file in <code>logrotate.d</code> e poi si riprende dalla riga successiva a "include". Ovviamente possono essere aggiunti tutti gli "include" che si desiderano.<br/>
serve a specificare il percorso in cui si trovano gli altri file di configurazione aggiuntivi per <code>logrotate</code>. Il normale flusso del file viene interrotto, si leggono i file in <code>logrotate.d</code> e poi si riprende dalla riga successiva a "include". Ovviamente possono essere aggiunti tutti gli "include" che si desiderano.<br/>
{{Box|Nota|L'opzione "include' risulta particolarmente utile per specificare un file o una directory personalizzata. In questo modo è possibile inserire delle proprie configurazioni senza modificare più di troppo il file <code>logrotate.conf</code> o senza aggiungere file a logrotate.d}}
{{Box|Nota|L'opzione "include' risulta particolarmente utile per specificare un file o una directory personalizzata. In questo modo è possibile inserire delle proprie configurazioni senza modificare più di troppo il file <code>logrotate.conf</code> o senza aggiungere file a <code>logrotate.d</code> .}}


Poiché questo file viene letto per primo, le opzioni contenute in logrotate.conf (ma che si trovano prima di "include") si applicano a tutti i file di log che hanno una sezione di configurazione nello stesso logrotate.conf oppure nei file contenuti in /etc/logrotate.d<br/>
Poiché questo file viene letto per primo, le opzioni contenute in <code>logrotate.conf</code> (ma che si trovano prima di "include") si applicano a tutti i file di log che hanno una sezione di configurazione nello stesso <code>logrotate.conf</code> oppure nei file contenuti in <code>/etc/logrotate.d</code> .<br/>
Ad esempio la direttiva:
Ad esempio la direttiva:
<pre>rotate 4</pre>
<pre>rotate 4</pre>
si applicherà a tutti i file di log, a meno che non venga inserita successivamente una uguale opzione che specifichi diversamente.
si applicherà a tutti i file di log, a meno che non venga inserita successivamente una uguale opzione che specifichi diversamente.


=== /etc/logrotate.d/ ===
=== <code>/etc/logrotate.d/</code> ===
In questa directory sono contenuti i file di configurazione per diversi log di sistema. Questi file vengono tipicamente installati da diversi pacchetti per gestire propri file di log.
In questa directory sono contenuti i file di configurazione per diversi log di sistema. Questi file vengono tipicamente installati da diversi [[pacchetto|pacchetti]] per gestire propri file di log.<br/>
I file contenuti in questa directory sono letti da <code>logrotate</code> in ordine alfabetico e, a meno che non abbiano una estensione particolare (vedi tabooext), vengono visti tutti come file di configurazione.
I file contenuti in questa directory sono letti da <code>logrotate</code> in ordine alfabetico e, a meno che non abbiano una estensione particolare (vedere la direttiva <code>tabooext</code>), vengono visti tutti come file di configurazione.


Ad esempio:
Ad esempio:
;/etc/logrotate.d/consolekit:viene installato tramite il pacchetto consolekit e istruisce <code>logrotate</code> su come gestire il file di log /var/log/Consolekit/history
;<code>/etc/logrotate.d/consolekit</code>:viene installato tramite il pacchetto ''consolekit'' e istruisce <code>logrotate</code> su come gestire il file di log <code>/var/log/Consolekit/history</code>
;/etc/logrotate.d/dpkg:viene installato tramite il pacchetto dpkg e istruisce <code>logrotate</code> su come gestire i file di log /etc/log/dpkg.log e /var/log/alternatives.log
;<code>/etc/logrotate.d/dpkg</code>:viene installato tramite il pacchetto ''dpkg'' e istruisce <code>logrotate</code> su come gestire i file di log <code>/etc/log/dpkg.log</code> e <code>/var/log/alternatives.log</code>
;/etc/logrotate.d/rsyslog:viene installato tramite il pacchetto rsyslog e istruisce <code>logrotate</code> su come gestire importanti file di log tra cui /var/log/kern.log, /var/log/syslog e /var/log/auth.log
;<code>/etc/logrotate.d/rsyslog</code>:viene installato tramite il pacchetto <code>rsyslog</code> e istruisce <code>logrotate</code> su come gestire importanti file di log tra cui <code>/var/log/kern.log</code>, <code>/var/log/syslog</code> e <code>/var/log/auth.log</code>


{{Warningbox|
{{Warningbox|
Prestare particolare attenzione al fatto che i file presenti in logrotate.d sono in tutto e per tutto dei file di configurazione di <code>logrotate</code> e non solo relativi a un particolare file di log. Una opzione globale, contenuta cioè al di fuori delle parentesi graffe, si applica a tutti i file successivi.<br/>
Prestare particolare attenzione al fatto che i file presenti in <code>logrotate.d</code> sono in tutto e per tutto dei file di configurazione di <code>logrotate</code> e non solo relativi a un particolare file di log. Una opzione globale, contenuta cioè al di fuori delle parentesi graffe, si applica a tutti i file successivi.<br/>
A meno che non abbiate un motivo valido per farlo, tutti i file che si trovano in /etc/logrotate.d/ non hanno e non dovrebbero avere direttive al di fuori delle parentesi graffe.}}
A meno che non abbiate un motivo valido per farlo, tutti i file che si trovano in <code>/etc/logrotate.d/</code> non hanno e non dovrebbero avere direttive al di fuori delle parentesi graffe.}}


=== /var/lib/logrotate/status ===
=== <code>/var/lib/logrotate/status</code> ===
Questo è il file in cui sono contenuti gli orari (timestamp) in cui è avvenuta l'ultima rotazione per un particolare file.  
Questo è il file in cui sono contenuti gli orari (timestamp) in cui è avvenuta l'ultima rotazione per un particolare file.  
La forma di questo file è:
La forma di questo file è:
nome_file_di_log timestamp
<pre>nome_file_di_log timestamp</pre>
quindi per ogni file viene specificato un timestamp che viene aggiornato dopo ogni rotazione.
quindi per ogni file viene specificato un timestamp che viene aggiornato dopo ogni rotazione.<br/>
<code>logrotate</code>, ad ogni sua esecuzione, consulta questo file per determinare se la rotazione deve avvenire o meno; inserisce anche nuove linee se sono state aggiunte configurazioni per altri file di log.
<code>logrotate</code>, ad ogni sua esecuzione, consulta questo file per determinare se la rotazione deve avvenire o meno; inserisce anche nuove linee se sono state aggiunte configurazioni per altri file di log.


== Opzioni ==
== Opzioni ==
Fino ad ora si è scritto di come le opzioni per <code>logrotate</code> siano contenute nel file /etc/logrotate.conf e nei file presenti in <code>/etc/logrotate.d/</code>. Adesso si cercherà di spiegare come funzionano le direttive e in cosa consistono.<br/>
Fino ad ora si è scritto di come le opzioni per <code>logrotate</code> siano contenute nel file <code>/etc/logrotate.conf</code> e nei file presenti in <code>/etc/logrotate.d/</code>. Adesso si cercherà di spiegare come funzionano le direttive e in cosa consistono.<br/>
Le direttive di <code>logrotate</code> possono essere di due tipi:
Le direttive di <code>logrotate</code> possono essere di due tipi:
* Direttive globali: si applicano a tutti i file ruotati da <code>logrotate</code>. Andrebbero inserite esclusivamente nel file <code>/etc/logrotate.conf</code>
* Direttive globali: si applicano a tutti i file ruotati da <code>logrotate</code>. Andrebbero inserite esclusivamente nel file <code>/etc/logrotate.conf</code>
Riga 99: Riga 100:
=== Opzioni globali ===
=== Opzioni globali ===
Sono direttive per <code>logrotate</code> che si applicano a tutti i file di log. Queste direttive vanno scritte nel file <code>/etc/logrotate.conf</code> e in nessun caso vanno inserite nei file in <code>/etc/logrotate.d/</code> (al di fuori delle parentesi graffe) a meno che non si sappia esattamente cosa si stia facendo.<br/>
Sono direttive per <code>logrotate</code> che si applicano a tutti i file di log. Queste direttive vanno scritte nel file <code>/etc/logrotate.conf</code> e in nessun caso vanno inserite nei file in <code>/etc/logrotate.d/</code> (al di fuori delle parentesi graffe) a meno che non si sappia esattamente cosa si stia facendo.<br/>
Una direttiva globale sovrascrive un'uguale direttiva precedente e si applica a tutti i file di log che seguono. Inserire pertanto in logrotate.conf la direttiva:
Una direttiva globale sovrascrive un'uguale direttiva precedente e si applica a tutti i file di log che seguono. Inserire pertanto in <code>logrotate.conf</code> la direttiva:
<pre> compress </pre>
<pre> compress </pre>
prima di:
prima di:
<pre> include /etc/logrotate.d </pre>
<pre> include /etc/logrotate.d </pre>
significa imporre la compressione per tutti i file di log successivi.
significa imporre la compressione per tutti i file di log successivi. Inserirla dopo la direttiva di "include" ha l'effetto di imporre la compressione solo per i file <code>/var/log/wtmp</code> e <code>/var/log/btmp</code> .
Inserirla dopo la direttiva di "include" ha l'effetto di imporre la compressione solo per i file <code>/var/log/wtmp</code> e <code>/var/log/btmp</code> .


=== Opzioni locali ===
=== Opzioni locali ===
Sono contenute tra parentesi graffe e si applicano solo al/ai file di log a cui si riferiscono. Le opzioni locali possono sovrascrivere le opzioni globali, anzi questo è ciò che accade normalmente.
Sono contenute tra parentesi graffe e si applicano solo al/ai file di log a cui si riferiscono. Le opzioni locali possono sovrascrivere le opzioni globali, anzi questo è ciò che accade normalmente.


Ad esempio il file logrotate.conf contiene:
Ad esempio il file <code>logrotate.conf</code> contiene:
<pre>
<pre>
/var/log/btmp {
/var/log/btmp {
Riga 118: Riga 118:
}
}
</pre>
</pre>
in cui ci sono quattro direttive locali per il file <code>/var/log/btmp</code>; l'ultima di queste (rotate 1) sovrascrive l'analoga direttiva globale contenuta nel file (rotate 4)<br/>
in cui ci sono quattro direttive locali per il file <code>/var/log/btmp</code>; l'ultima di queste ("rotate 1") sovrascrive l'analoga direttiva globale contenuta nel file ("rotate 4")<br/>
Altro esempio è il file /etc/logrotate.d/consolekit che contiene:
Altro esempio è il file <code>/etc/logrotate.d/consolekit</code> che contiene:
<pre>rotate 6</pre>
<pre>rotate 6</pre>
anch'esso sovrascrive l'analoga direttiva contenuta in /etc/logrotate.conf
anch'esso sovrascrive l'analoga direttiva contenuta in <code>/etc/logrotate.conf</code> .


Le direttive locali possono essere applicate anche a più di un file:
Le direttive locali possono essere applicate anche a più di un file:
Riga 149: Riga 149:


=== Opzioni disponibili ===
=== Opzioni disponibili ===
Qui di seguito verranno elencate le opzioni più comuni per <code>logrotate</code>. Alcune di esse hanno una corrispettiva opzione che ne disabilita il comportamento (normalmente è un'opzione locale che disabilita/sovrascrive un'opzione globale). Alcune vanno inserite senza ulteriori aggiunte, altre devono essere seguite da un parametro, altre ancora hanno significato solo se sono state specificate in precedenza altre opzioni. <code>Logrotate</code>, nel caso alcune opzioni non siano state definite, può non considerarle oppure considerarle attribuendogli un valore di default.
Qui di seguito verranno elencate le opzioni più comuni per <code>logrotate</code>. Alcune di esse hanno una corrispettiva opzione che ne disabilita il comportamento (normalmente è un'opzione locale che disabilita/sovrascrive un'opzione globale). Alcune vanno inserite senza ulteriori aggiunte, altre devono essere seguite da un parametro, altre ancora hanno significato solo se sono state specificate in precedenza altre opzioni. <code>logrotate</code>, nel caso alcune opzioni non siano state definite, può non considerarle oppure considerarle attribuendogli un valore di default.
fare riferimento alla pagina di manuale:
Fare riferimento alla pagina di manuale:
<pre>$ man logrotate</pre>
<pre>$ man logrotate</pre>
per una trattazione completa.
per una trattazione completa.


'''compress, nocompress'''<br/>
'''compress, nocompress'''<br/>
Indica a <code>logrotate</code> se procedere o meno con la compressione dei file ruotati. L'opzione di default è "nocompress", per cui si avranno: miolog, miolog.1, miolog.2 e così via mentre, se "compress" è specificato, si otterrà miolog, miolog.1.gz, miolog.2.gz e così via.<br/>
Indica a <code>logrotate</code> se procedere o meno con la compressione dei file ruotati. L'opzione di default è "nocompress", per cui si avranno: ''miolog, miolog.1, miolog.2'' e così via mentre, se "compress" è specificato, si otterrà ''miolog, miolog.1.gz, miolog.2.gz'' e così via.<br/>
Notare che in <code>logrotate.conf</code> l'opzione "compress' è commentata:
Notare che in <code>logrotate.conf</code> l'opzione "compress' è commentata:
<pre>
<pre>
Riga 161: Riga 161:
</pre>
</pre>
questo significa che tutti i log, a meno che non abbiano l'opzione locale "compress", non saranno compressi.<br/>
questo significa che tutti i log, a meno che non abbiano l'opzione locale "compress", non saranno compressi.<br/>
Il comando di compressione utilizzato è gzip.
Il comando di compressione utilizzato è ''gzip''.


'''compresscmd'''
'''compresscmd'''
Questa opzione può essere utilizzata per specificare un comando diverso da gzip con cui effettuare la compressione. Ad esempio:
Questa opzione può essere utilizzata per specificare un comando diverso da ''gzip'' con cui effettuare la compressione. Ad esempio:
<pre>
<pre>
/var/log/miolog {
/var/log/miolog {
Riga 174: Riga 174:
}   
}   
</pre>
</pre>
per usare lzma al posto di gzip.
per usare ''lzma'' al posto di ''gzip''.
        
        
'''uncompresscmd'''<br/>
'''uncompresscmd'''<br/>
Come "compresscmd" ma deve essere specificato l'eseguibile con cui decomprimere i file compressi (necessario per inviare i log via email).<br/>
Come "compresscmd" ma deve essere specificato l'eseguibile con cui decomprimere i file compressi (necessario per inviare i log via email).<br/>
Ad esempio, se il programma di compressione è lzma, come programma di decompressione verrà utilizzato unlzma:
Ad esempio, se il programma di compressione è ''lzma'', come programma di decompressione verrà utilizzato ''unlzma'':
<pre>
<pre>
/var/log/miolog {
/var/log/miolog {
Riga 188: Riga 188:
}
}
</pre>
</pre>
Di default viene utilizzato gunzip.
Di default viene utilizzato ''gunzip''.


'''compressext'''<br/>
'''compressext'''<br/>
Riga 201: Riga 201:


'''compressoptions'''<br/>
'''compressoptions'''<br/>
Se si vuole eseguire il comando di compressione con delle opzioni, questo è il posto per specificarle. Di default viene utilizzato "gzip" e le sua opzione di default è "-9" (massima compressione)
Se si vuole eseguire il comando di compressione con delle opzioni, questo è il posto per specificarle. Di default viene utilizzato "gzip" e le sua opzione di default è "-9" (massima compressione).


'''copy, nocopy'''<br/>
'''copy, nocopy'''<br/>
Riga 213: Riga 213:


'''create, nocreate'''<br/>
'''create, nocreate'''<br/>
Viene creato un nuovo file di log subito dopo la rotazione. Quindi, se miolog viene ruotato in miolog.1.gz, verrà creato un nuovo file miolog che, di default, avrà gli stessi attributi del precedente. Questo comportamento può essere modificato specificando esplicitamente i nuovi attributi e l'utente/gruppo proprietario del file:
Viene creato un nuovo file di log subito dopo la rotazione. Quindi, se ''miolog'' viene ruotato in ''miolog.1.gz'', verrà creato un nuovo file ''miolog'' che, di default, avrà gli stessi attributi del precedente. Questo comportamento può essere modificato specificando esplicitamente i nuovi attributi e l'utente/gruppo proprietario del file:
<pre>
<pre>
create 666 pippo:disney
create 666 pippo:disney
Riga 220: Riga 220:
        
        
'''daily, monthly, weekly, yearly'''<br/>
'''daily, monthly, weekly, yearly'''<br/>
Quando ruotare il file di log (una volta al giorno, una a settimana, una al mese o una all'anno). <br/>
Quando ruotare il file di [[log]] (una volta al giorno, una a settimana, una al mese o una all'anno). <br/>
Logrotate si avvia una volta al giorno al minuto/ora giornalieri specificati in /etc/crontab (sempre che non sia installato [[anacron]]), quindi confronta il timestamp con la data corrente e procedere alla rotazione in base all'opzione specificata.<br/>
logrotate si avvia una volta al giorno al minuto/ora giornalieri specificati in <code>/etc/crontab</code> (sempre che non sia installato [[anacron]]), quindi confronta il timestamp con la data corrente e procedere alla rotazione in base all'opzione specificata.<br/>
Se il log da ruotare è più vecchio di un giorno rispetto al timestamp ed è specificato 'daily', il log viene ruotato.<br/>
Se il log da ruotare è più vecchio di un giorno rispetto al timestamp ed è specificato 'daily', il log viene ruotato.<br/>
Se il log da ruotare è più vecchio di una settimana rispetto al timestamp ed è specificato 'weekly', il log viene ruotato.<br/>
Se il log da ruotare è più vecchio di una settimana rispetto al timestamp ed è specificato 'weekly', il log viene ruotato.<br/>
Riga 230: Riga 230:
        
        
'''dateext, nodateext, dateformat, dateyesterday'''<br/>
'''dateext, nodateext, dateformat, dateyesterday'''<br/>
Il file ruotato ha, di default, l'estensione contenente un numero (ad es. miofile.1 o, se compresso, miofile.1.gz).<br/>
Il file ruotato ha, di default, l'estensione contenente un numero (ad es. ''miofile.1'' o, se compresso, ''miofile.1.gz'').<br/>
Questa opzione permette di sostituire il numero con la data corrente nel formato YYYYMMDD. Ad esempio con:
Questa opzione permette di sostituire il numero con la data corrente nel formato YYYYMMDD. Ad esempio con:
<pre>
<pre>
Riga 239: Riga 239:
}
}
</pre>
</pre>
il log ruotato sarà miolog-20140811 o, se compresso, miolog-20140811.gz .<br/>
il log ruotato sarà ''miolog-20140811'' o, se compresso, ''miolog-20140811.gz'' .<br/>
"dateyesterday" permette di creare l'estensione con la data del giorno precedente alla rotazione, mentre con "dateformat" si può personalizzare il formato che la data dovrà utilizzare:
"dateyesterday" permette di creare l'estensione con la data del giorno precedente alla rotazione, mentre con "dateformat" si può personalizzare il formato che la data dovrà utilizzare:
<pre>
<pre>
Riga 249: Riga 249:
}
}
</pre>
</pre>
e il log ruotati saranno del tipo miolog-creato_il_20140811.gz .<br/>
e il log ruotati saranno del tipo ''miolog-creato_il_20140811.gz'' .<br/>
"nodateext" permette di disabilitare l'opzione "dateext" se definita in precedenza come opzione globale.
"nodateext" permette di disabilitare l'opzione "dateext" se definita in precedenza come opzione globale.
        
        
'''delaycompress, nodelaycompress'''<br/>
'''delaycompress, nodelaycompress'''<br/>
Se è specificato "compress", il primo log ruotato subirà un ritardo ("delay") nella compresssione che partirà dalla seconda rotazione in poi. Il risultato è quello di avere "miolog", "miolog.1", miolog.2.gz, miolog.3.gz e così via.<br/>
Se è specificato "compress", il primo log ruotato subirà un ritardo ("delay") nella compresssione che partirà dalla seconda rotazione in poi. Il risultato è quello di avere ''miolog, miolog.1, miolog.2.gz, miolog.3.gz'' e così via.<br/>
Di default, se è specificato "compress", viene utilizzato "nodelaycompress" per cui non c'è nessun ritardo e i log saranno del tipo: miolog, miolog.1.gz, miolog.2.gz .
Di default, se è specificato "compress", viene utilizzato "nodelaycompress" per cui non c'è nessun ritardo e i log saranno del tipo: ''miolog, miolog.1.gz, miolog.2.gz'' .
      
      
'''ifempty, notifempty'''<br/>
'''ifempty, notifempty'''<br/>
Riga 268: Riga 268:
...
...
</pre>
</pre>
notare che bisogna inserire il [[path]] del file.
notare che bisognerà inserire il [[path]] completo del file.
        
        
Lo stesso discorso vale anche per una directory:
Lo stesso discorso vale anche per una directory:
Riga 280: Riga 280:
'''mail, nomail, mailfirst, maillast'''<br/>
'''mail, nomail, mailfirst, maillast'''<br/>
Queste opzioni possono essere utilizzate per inviare via email i log ruotati. I log, se compressi, verranno decompressi prima di essere inviati (vedere l'opzione "uncompresscmd"). <br/>
Queste opzioni possono essere utilizzate per inviare via email i log ruotati. I log, se compressi, verranno decompressi prima di essere inviati (vedere l'opzione "uncompresscmd"). <br/>
"mail" deve essere seguita da un indirizzo di posta valido e serve per inviare via email il log che sta per essere cancellato (se vi sono quattro rotazioni, sarà inviato il log miolog.5 o miolog.5.gz) o il log appena ruotato (miolog.1 o miolog.1.gz).<br/>
"mail" deve essere seguita da un indirizzo di posta valido e serve per inviare via email il log che sta per essere cancellato (se vi sono quattro rotazioni, sarà inviato il log ''miolog.5'' o ''miolog.5.gz'') o il log appena ruotato (''miolog.1'' o ''miolog.1.gz'').<br/>
Tutti i file riprendono poi il loro normale comportamento (miolog.5.gz verrà cancellato, i file ruotati e miolog.1.gz resterà nella directory).<br/>
Tutti i file riprendono poi il loro normale comportamento (''miolog.5.gz'' verrà cancellato, i file ruotati e ''miolog.1.gz'' resterà nella directory).<br/>
Facciamo qualche esempio:
Facciamo qualche esempio:
<pre>
<pre>
Riga 290: Riga 290:
}
}
</pre>
</pre>
verrà inviato a root il log che sta per essere cancellato dopo la rotazione. Questa sintassi è equivalente a:
verrà inviato a [[root]] il log che sta per essere cancellato dopo la rotazione. Questa sintassi è equivalente a:
<pre>
<pre>
/var/log/miolog {
/var/log/miolog {
Riga 310: Riga 310:
Verrà inviato a root il file appena ruotato.
Verrà inviato a root il file appena ruotato.
    
    
'''size, maxsize, minsize'''
'''size, maxsize, minsize'''<br/>
Permettono di ruotare i file in base alla loro grandezza.<br/>
Permettono di ruotare i file in base alla loro grandezza.<br/>
Queste opzioni devono essere seguite da una numero che indica i kilobyte (k), i megabyte (M) o i gigabyte (G); se non viene specificato nulla, si assumerà una grandezza espressa in byte.<br/>
Queste opzioni devono essere seguite da una numero che indica i kilobyte (k), i megabyte (M) o i gigabyte (G); se non viene specificato nulla, si assumerà una grandezza espressa in byte.<br/>
Riga 363: Riga 363:
Questo vuol dire che il confronto sulla data e sulla dimensione sono in "OR" logico; basta che una delle due condizioni sia verificata perché avvenga la rotazione e sia aggiornato il file <code>var/lib/logrotate/status</code> .
Questo vuol dire che il confronto sulla data e sulla dimensione sono in "OR" logico; basta che una delle due condizioni sia verificata perché avvenga la rotazione e sia aggiornato il file <code>var/lib/logrotate/status</code> .
        
        
Da questo comportamento dovrebbero risutare chiare due cose:
Da questo comportamento dovrebbero risutare chiare due cose:<br/>
1) se ci si aspetta una rotazione alla fine del mese (diciamo il 25 agosto) ma la dimensione del log raggiunge 1M il 20 agosto, il log viene ruotato prima e il successivo confronto con la data verrà fatto il 20 settembre (e così via, teoricamente si può avere una rotazione del log senza che venga mai fatto un confronto tra date).  
1) se ci si aspetta una rotazione alla fine del mese (diciamo il 25 agosto) ma la dimensione del log raggiunge 1M il 20 agosto, il log viene ruotato prima e il successivo confronto con la data verrà fatto il 20 settembre (e così via, teoricamente si può avere una rotazione del log senza che venga mai fatto un confronto tra date).<br/>
2) non si può fare affidamento sul periodo di rotazione impostato per il log; lo svantaggio è quello, ad esempio, di trovarsi con dodici rotazioni distanziate di un giorno anche se la configurazione era di dodici rotazioni distanziate di un mese.
2) non si può fare affidamento sul periodo di rotazione impostato per il log; lo svantaggio è quello, ad esempio, di trovarsi con dodici rotazioni distanziate di un giorno anche se la configurazione era di dodici rotazioni distanziate di un mese.
        
        
Riga 378: Riga 378:
</pre>
</pre>
Se il log raggiunge 1M, avviene la rotazione ma non viene modificato il timestamp, per cui la rotazione prevista dopo il periodo indicato (nell'esempio è un mese) viene comunque eseguita.<br/>
Se il log raggiunge 1M, avviene la rotazione ma non viene modificato il timestamp, per cui la rotazione prevista dopo il periodo indicato (nell'esempio è un mese) viene comunque eseguita.<br/>
Il risultato è quello di avere dei log ruotati con una dimensione massima di 1M e distanziati al più di un mese (ma potrebbero essere distanziati di un intervallo temporale minore)
Il risultato è quello di avere dei log ruotati con una dimensione massima di 1M e distanziati al più di un mese (ma potrebbero essere distanziati di un intervallo temporale minore).


Con "minsize" avviene qualcosa di analogo:
Con "minsize" avviene qualcosa di analogo:
Riga 391: Riga 391:
Dopo un mese viene controllata la dimensione, se questa non supera i 500k allora la rotazione non avviene, il timestamp non viene aggiornato e si rinvia tutto alla successiva esecuzione di <code>logrotate</code>.<br/>
Dopo un mese viene controllata la dimensione, se questa non supera i 500k allora la rotazione non avviene, il timestamp non viene aggiornato e si rinvia tutto alla successiva esecuzione di <code>logrotate</code>.<br/>
Il risultato è quello di avere dei log ruotati con una dimensione minima di 500k e distanziati di almeno un mese (ma potrebbero essere distanziati di un intervallo temporale maggiore).
Il risultato è quello di avere dei log ruotati con una dimensione minima di 500k e distanziati di almeno un mese (ma potrebbero essere distanziati di un intervallo temporale maggiore).
Si scelga, pertanto, con particolare cura il valore di queste opzioni per non incappare in comportamenti imprevisti.
        
        
'''missingok, nomissingok'''<br/>
'''missingok, nomissingok'''<br/>
Se il file di log non esiste, <code>logrotate</code> terminerà con un messaggio d'errore. Se è specificato "missingok", logrotate non segnalerà nulla.<br/>
Se il file di log non esiste, <code>logrotate</code> terminerà con un messaggio d'errore. Se è specificato "missingok", <code>logrotate</code> non segnalerà nulla.<br/>
Di default è utilizzata "nomissingok".
Di default è utilizzata "nomissingok".
      
      
'''olddir, noolddir(d)'''<br/>
'''olddir, noolddir(d)'''<br/>
La directory in cui vengono salvati i file ruotati (siano essi compressi o meno). Se viene specificata una directory solo con il proprio nome, questa si deve trovare nella stessa directory in cui si trova il file di log. Può essere specificato un percorso assoluto per bypassare questo comportamento.<br/>
La directory in cui vengono salvati i file ruotati (siano essi compressi o meno). Se viene specificata una directory solo con il proprio nome, questa si deve trovare nella stessa directory in cui si trova il file di log. Può essere specificato un percorso assoluto per bypassare questo comportamento.<br/>
Riga 486: Riga 487:
}
}
</pre>
</pre>
dopo tre rotazioni si avrà: miolog, miolog.1.gz, miolog.2.gz e miolog.3.gz .<br/>
dopo tre rotazioni si avrà: ''miolog, miolog.1.gz, miolog.2.gz'' e ''miolog.3.gz'' .<br/>
Alla successiva rotazione miolog.3.gz verrà cancellato e il suo posto verrà preso da miolog.2.gz che verrà rinominato in miolog.3.gz procedendo a cascata per i file miolog.1.gz e miolog .<br/>
Alla successiva rotazione ''miolog.3.gz'' verrà cancellato e il suo posto verrà preso da ''miolog.2.gz'' che verrà rinominato in ''miolog.3.gz'' procedendo a cascata per i file ''miolog.1.gz'' e ''miolog'' .<br/>
Di default il valore per "rotate" è 0, ossia il log ruotato viene immediatamente cancellato.
Di default il valore per "rotate" è 0, ossia il log ruotato viene immediatamente cancellato.


'''shred, noshred, shredcycles numero'''<br/>
'''shred, noshred, shredcycles numero'''<br/>
Dopo il numero di rotazioni definito (es. quattro rotazioni) il comportamento di default è quello di cancellare il log più vecchio (es. miofile.4.gz).<br/>
Dopo il numero di rotazioni definito (es. quattro rotazioni), il comportamento di default è quello di cancellare il log più vecchio (es. ''miofile.4.gz'').<br/>
Con questa opzione si utilizza shred per una cancellazione sicura del file.
Con questa opzione si utilizza ''shred'' per una cancellazione sicura del file.


Ad esempio si può inserire in <code>logrotate.conf</code> le seguenti righe:
Ad esempio si può inserire in <code>logrotate.conf</code> le seguenti righe:
Riga 501: Riga 502:
...
...
</pre>
</pre>
per utilizzare la cancellazione sicura per tutti i file di log che verranno eliminati (a meno che non si specificato noshred per un particolare file).<br/>
per utilizzare la cancellazione sicura per tutti i file di log che stanno per essere eliminati (a meno che non sia stato specificato ''noshred'' per un particolare file).<br/>
"shredcycles" è seguito da un numero che indica quante sovrascritture verranno utilizzate da shred, se non si specifica questa opzione, shred utilizzerà il numero di sovrascitture predefinito (tre). Vedere anche "man shred".<br/>
"shredcycles" è seguito da un numero che indica quante sovrascritture verranno utilizzate da ''shred'', se non si specifica questa opzione, ''shred'' utilizzerà il numero di sovrascitture predefinito (tre). Vedere anche "man shred".<br/>
Questa opzione stabilisce solo le modalità di cancellazione, l'invio tramite email (se impostato) sarà ancor valido.<br/>
Questa opzione stabilisce solo le modalità di cancellazione, l'invio tramite email (se impostato) sarà ancor valido.<br/>
L'opzione di default è "noshred".
L'opzione di default è "noshred".


'''start count'''<br/>
'''start count'''<br/>
Il numero da cui si parte per contrassegnare i file ruotati. Di default è uno.<br/<
Il numero da cui si parte per contrassegnare i file ruotati. Di default è uno.<br/>
Con:
Con:
<pre>
<pre>
Riga 517: Riga 518:
}
}
</pre>
</pre>
Si avranno: miolog, miolog.3.gz, miolog.4.gz, miolog.5.gz, miolog.6.gz .
Si avranno: ''miolog, miolog.3.gz, miolog.4.gz, miolog.5.gz, miolog.6.gz'' .
    
    
'''su user group'''<br/>
'''su user group'''<br/>
Il gruppo e l'utente con cui viene eseguito <code>logrotate</code>. Attenzione: l'uso di questa opzione non porta alla creazione dei file ruotati con le credenziali qui definite.<br/>
Il gruppo e l'utente con cui viene eseguito <code>logrotate</code>. Attenzione: l'uso di questa opzione '''non porta''' alla creazione dei file ruotati con le credenziali qui definite.<br/>
Di default logrotate viene eseguito con le credenziali "root:root" .
Di default <code>logrotate</code> viene eseguito con le credenziali "root:root" .


'''tabooext [+] list'''<br/>
'''tabooext [+] list'''<br/>
Di default tutti i file contenuti nella directory "/etc/logrotate.d/" o nelle directory specificate con l'opzione "include" vengono visti come file di configurazione. Tutti eccetto quelli con estensioni predefinite (vedere la [[manpage]] di <code>logrotate</code>) e quelli specificati con questa opzione.<br/>
Di default tutti i file contenuti nella directory <code>/etc/logrotate.d/</code> o nelle directory specificate con l'opzione "include" vengono visti come file di configurazione. Tutti eccetto quelli con estensioni predefinite (vedere la [[manpage]] di <code>logrotate</code>) e quelli specificati con questa opzione.<br/>
Il carattere "+" aggiunge un'estensione alla lista predefinita'. Senza "+" le estensioni sostituiranno la lista predefinita.
Il carattere "+" aggiunge un'estensione alla lista predefinita'. Senza "+" le estensioni sostituiranno la lista predefinita.<br/>
Quindi con:
<pre>
<pre>
/var/log/miolog {
/var/log/miolog {
Riga 534: Riga 536:
}
}
</pre>
</pre>
Aggiunge l'estensione ".readme" alla lista predefinita. In questo modo è possibile creare un file (ad es. LEGGIMI.readme) in <code>logrotate.d</code> in cui scrivere annotazioni sulle operazioni personalizzate (file creati, quali opzioni sono state modificate, dove, per quale file) che si sono scelte per <code>logrotate</code>; in questo modo il file LEGGIMI.readme non verrà considerato come un file di configurazione.<br/>
verrà aggiunta l'estensione ".readme" alla lista predefinita. In questo modo è possibile creare un file (ad es. ''LEGGIMI.readme'') in <code>logrotate.d</code> in cui scrivere annotazioni sulle operazioni personalizzate (file creati, quali opzioni sono state modificate, dove, per quale file) che si sono scelte per <code>logrotate</code>; in questo modo il file ''LEGGIMI.readme'' non verrà considerato come un file di configurazione.<br/>
Se si vogliono più estensioni, separarle con una virgola:
Se si vogliono più estensioni, separarle con una virgola:
<pre>
<pre>
tabooext + .readme, .leggimi, .info, .txt
tabooext + .readme, .leggimi, .info, .txt
</pre>
</pre>
           
 
== Personalizzare <code>logrotate.d</code> ==
== Personalizzare <code>logrotate.d</code> ==
        
        
Riga 548: Riga 550:
=== Log di sistema ===
=== Log di sistema ===
Tipicamente le configurazioni di default in "logrotate.conf" e "logrotate.d/" vanno più che bene.<br/>
Tipicamente le configurazioni di default in "logrotate.conf" e "logrotate.d/" vanno più che bene.<br/>
Se si decide di modificarle, tener presente che gli aggiornamenti di <code>logrotate.d</code> o dei programmi che creano file in logortate.d potrebbero tentare una sovrascrittura nel caso abbiano apportato dei cambiamenti nei file di configurazione di default.<br/>
Se si decide di modificarle, tener presente che gli aggiornamenti di <code>logrotate.d</code> o dei programmi che creano file in <code>logrotate.d</code> potrebbero tentare una sovrascrittura nel caso abbiano apportato dei cambiamenti nei file di configurazione di default.<br/>
La soluzione più semplice è utilizzare l'opzione "include" e utilizzare un file di configurazione personalizzato oppure, se i cambiamenti sono pochi, modificare <code>logrotate.conf</code> ed effettuare un backup del file modificato.
La soluzione più semplice è utilizzare l'opzione "include" e un file di configurazione personalizzato oppure, se i cambiamenti sono pochi, modificare <code>logrotate.conf</code> ed effettuare un backup del file modificato.
        
        
Modificate con attenzione il file <code>logrotate.conf</code> e, se possibile, non toccate i file che si trovano nella directory "logrotate.d/" a meno che non conosciate con precisione le conseguenze che avranno i vostri cambiamenti.
Modificate con attenzione il file <code>logrotate.conf</code> e, se possibile, non toccate i file che si trovano nella directory "logrotate.d/" a meno che non conosciate con precisione le conseguenze che avranno i vostri cambiamenti.
Riga 563: Riga 565:
        
        
Un esempio chiarisce il concetto.<br/>
Un esempio chiarisce il concetto.<br/>
Supponiamo di avere uno [[script]] che scrive i suoi log nel file <code>/home/pluto/mylogs/mylog.log</code> e che di abbia la necessità di doverlo ruotare affinché non cresca troppo; si vuole anche che i log più vecchi non vengano cancellati ma salvati nella directory <code>/home/pluto/backuplogs/</code> .<br/>
Supponiamo di avere uno [[script]] che scrive i suoi log nel file <code>/home/pluto/mylogs/mylog.log</code> e che si abbia la necessità di doverlo ruotare affinché non cresca troppo; si vuole anche che i log più vecchi non vengano cancellati ma salvati nella directory <code>/home/pluto/backuplogs/</code> .<br/>
A tal scopo creiamo innanzitutto, con i permessi di root, due file:
A tal scopo creiamo innanzitutto, con i permessi di root, due file:
* <code>/usr/local/etc/miologrotate.status</code>
* <code>/usr/local/etc/miologrotate.status</code>
Riga 591: Riga 593:
}
}
</pre>
</pre>
Poi aggiungiamo un job di [[cron]] per root:
e aggiungiamo un job di [[cron]] per root:
<pre>
<pre>
0 0 * * * /usr/sbin/logrotate -s /usr/local/etc/miologrotate.status /usr/local/etc/miologrotate.conf
0 0 * * * /usr/sbin/logrotate -s /usr/local/etc/miologrotate.status /usr/local/etc/miologrotate.conf
</pre>
</pre>
Ora, a mezzanotte di ogni giorno, viene eseguito <code>logrotate</code>. Se è passato un giorno dall'ultima rotazione, il log viene ruotato, compresso con lzma, inviato via email all'utente "pluto" e copiato nella directory <code>/home/pluto/backuplogs/</code> con il nome comprensivo della data.<br/>
Ora, a mezzanotte di ogni giorno, viene eseguito <code>logrotate</code>. Se è passato un giorno dall'ultima rotazione, il log viene ruotato, compresso con ''lzma'', inviato via email all'utente "pluto" e copiato nella directory <code>/home/pluto/backuplogs/</code> con il nome comprensivo della data.<br/>
Vi è un'unica rotazione (rotate 1) per cui esisterà solo un file .lzma nella directory, questo file viene comunque subito spostato in <code>/home/pluto/backuplogs/</code> .
Vi è un'unica rotazione ("rotate 1") per cui esisterà solo un file .lzma nella directory, questo file viene comunque subito spostato in <code>/home/pluto/backuplogs/</code> (direttiva ''lastaction'').
Tutti i permessi dei file compressi rimangono gli stessi del file iniziale <code>mylog.log</code> .
Tutti i permessi dei file compressi rimangono gli stessi del file iniziale <code>mylog.log</code> .
        
        
6 999

contributi

Menu di navigazione