Logrotate: "non è necessario ruotare il registro" perché?


57

Ho la seguente nuova configurazione logrotate:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

Quando corro logrotate -d nexus, ottengo quanto segue:

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

La mia cartella / var / log / nexus / contiene quanto segue:

nexus.log
oldlogs.tar.gz

Perché LogRotate non sta ruotando il file nexus.log? Quello che mi aspettavo era che il file nexus.log sarebbe stato troncato e che sarebbe stato creato un nuovo file, qualcosa come nexus.log-201106241000.


Inoltre, ricorda, quando usi l'opzione -d, NON RUOTA I LOG. Ti mostra cosa farebbe correre senza l'opzione, come un piano di gioco. Mi ha causato alcuni gravi mal di testa quando pensavo di poterli vedere in rotazione, e poi erano ancora lì.
Maxwell Flanders,

Risposte:


64

Molto probabilmente, il file di registro ha meno di un giorno e / o è stato ruotato nell'ultimo giorno e logrotate ricorda la cronologia.

Se lo aggiungi -f, forzerai una rotazione se vuoi davvero (anche se non sicuro al 100% con come interagisce -d).

Puoi guardare la cronologia, la posizione dipende dalla tua distribuzione, ma potrebbe esserlo /var/lib/logrotate/status. Quel file mostra quando i log sono stati ruotati l'ultima volta.


4
In FreeBSD è
/var/run/logrotate.status

Controlla anche il possibile utilizzo dell'argomento -s
nell'invocazione

2
-d+ -frende logrotate il rapporto "necessita di rotazione" per tutti i file, anche quelli che non corrispondono
Fluffy

Per aggiungere a ciò, è sufficiente modificare la data nel file di stato in modo che sia precedente alla politica di rotazione per convincere che logrotateè necessario ruotare il registro quando viene eseguito di nuovo.
Centimane,

Su CentOS, ho modificato /var/lib/logrotate.status per far funzionare logrotate. Come indicato da EightBitTony, il logrotate giornaliero ricorderà la cronologia. A meno che il file non sia già nella cronologia con una data precedente, logrotate non ruoterà il file.
Mark

58

La prima volta che esegui logrotate con una nuova configurazione del registro, non sa quando si è verificata l'ultima rotazione del registro, quindi scrive solo una riga di stato /var/lib/logrotate/statusnell'effetto che è stato eseguito oggi.

Quando viene eseguito successivamente il giorno successivo, rileva che il registro è vecchio di un giorno e lo ruota come previsto. Se non si desidera attendere, modificare il file di stato di logrotate e riportare la data di stato del registro al giorno precedente.

Quando si esegue logrotate manualmente, funzionerà come previsto


5

A volte anche se esegui logrotate manualmente, questo non funzionerà se lo fai lo stesso giorno e hai un dateextvalore predefinito che non include senconds (ad es -%Y%m%d.). Nemmeno se si modifica il file di stato di logrotate o quando si utilizza la direttiva size (ad es size 200M.). Almeno su CentOS 6, logrotate non riuscirà a ruotare il file di registro perché esiste già.

Per risolvere questo problema, è necessario utilizzare dateformatal posto di dateext, con un valore del tipo: %Y%m%d%s.

Vedi man logrotateper maggiori informazioni.


1

Attenzione correndo

logrotate -vdf /etc/logrotate.conf

l'evento, sebbene solo simulato, verrà registrato /var/lib/logrotate.status e le successive esecuzioni logrotate risponderanno con il menzionato

log does not need rotating

1
Non riesco a riprodurlo su Ubuntu (16.04 e 17.04). Se si utilizza "/var/lib/logrotate.status", è necessario utilizzare un'altra distro. Ubuntu accede a "/ var / lib / logrotate / status".
Philipp Claßen,

2
@Philipp Claßen: Hai ragione, questo (file di stato collocato in /var/lib/logrotate.status) è stato osservato durante il debug della configurazione di Logrotate 3.10 su Alpine Linux 3.5 all'interno di un contenitore docker. Ma non esiste un flag Ubuntu nella definizione della domanda, vero?
elvete,

1
Sì, va tutto bene. Vorrei solo menzionarlo perché Ubuntu è così popolare. Presumo che molte persone leggano questa domanda perché vogliono riparare il loro server, che oggi spesso funziona con Ubuntu.
Philipp Claßen,

1
Ok è giusto. Per essere completo, posso aggiungere che l'ubicazione del file di stato in Centos 7 distro è at/var/lib/logrotate/logrotate.status
helvete,
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.