it-swarm.it

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

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.

60
Rich

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

Se aggiungi -f forzerà una rotazione se vuoi davvero (anche se non sicuro al 100% di come interagisce con -d).

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

68
EightBitTony

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 in /var/lib/logrotate/status secondo cui è 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

61
Tony Sweeney

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

Per risolvere questo, devi usare dateformat invece di dateext, con un valore come: %Y%m%d%s.

Vedi man logrotate per maggiori informazioni.

5
emerino

Attenzione correndo

logrotate -vdf /etc/logrotate.conf

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

log does not need rotating
1
helvete