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.