In che modo logrotate gestisce esattamente "quotidianamente"?


30

A giudicare dai timestamp sui miei sistemi, logrotate esegue la sua rotazione giornaliera dei log quando logrotate viene eseguito da cron. Tuttavia, se lo eseguo prima di quello non ruota i file. Come fa Logrotate a sapere se è necessario ruotarli o meno, mantiene una cronologia o utilizza timestamp?

Risposte:


32

Credo che sia il contenuto del file di stato, che è il mio caso /var/lib/logrotate.status. Ogni file ha una riga, che è la data in cui è stata ruotata l'ultima volta; se si esegue logrotate in una data tale che un determinato file è in rotazione, dato il numero di giorni tra la data corrente e la data nel file (1 per giornaliero, 7 per settimanale, ecc.), il file verrà ruotato.

a logrotate non sembra importare a che ora del giorno viene eseguito; anche se di solito viene eseguito a 2355, se invece dovesse essere eseguito a 0130, ruoterebbe comunque i file contrassegnati giornalmente e l'ultimo eseguito ieri; ma, fatto ciò, metterebbe la data odierna nel file di stato (rispetto a qualsiasi file ruotato), quindi una seconda esecuzione a 2355 non farebbe nulla.


1
Hmm .. Quindi ruota solo se: data corrente> data in /var/lib/logrotate/status(come il file è nel mio caso).
Kyle Brandt,

2
Penso che faccia qualcosa solo se sono trascorse 24 ore dall'ultima esecuzione, che funziona esaminando il mtime del file di stato. Una volta deciso che è passata un'intera giornata e che può legittimamente fare qualsiasi cosa, prende decisioni GIORNALIERE, SETTIMANALI ecc. In base ai campi della data all'interno del file.
MadHatter supporta Monica il

4
Beh, sembra usare la data in quel file. Un giorno ho impostato il giorno nel file di stato e l'ho eseguito ... ruotato ..
Kyle Brandt

Sono appena tornato e ho cercato il mio logrotate, penso di aver sbagliato e quello che scrivi sopra è giusto. Decide se è già stato eseguito oggi osservando il timestamp del file di stato; in caso contrario, procede ad estrarre le date dell'ultima rotazione dal file di stato e agisce di conseguenza. Ho appena mentito per eseguire il logrotate con vi e toccare -t per convincerlo che è durato ieri alle 2355, quando ha ruotato i miei registri di munin. Eseguendolo di nuovo, anche se è stato meno di 24 ore, li ha ruotati fuori e aggiornato il file di stato di conseguenza.
MadHatter supporta Monica il

Ho aggiornato la mia risposta alla mia attuale comprensione, data la serie di test che ho appena eseguito (tagliando i miei registri di munin a otto vie di domenica, ma chi se ne frega!).
MadHatter supporta Monica il

11

Dalla pagina man logrotate:

Normalmente, logrotate viene eseguito come cron job giornaliero. Non modificherà un registro più di una volta in un giorno a meno che il criterio per quel registro non sia basato sulla dimensione del registro e che il logrotate venga eseguito più di una volta al giorno, o a meno che non venga utilizzata l'opzione -f o -force.


1
per vedere quando cron.daily viene eseguito, vai qui .
Trevor Boyd Smith,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.