Logrotate non funzionante


18

Sto cercando di far funzionare logrotate sul mio VPS per ruotare i miei file apache settimanalmente. Attualmente il contenuto del file di configurazione di apache2 è come tale.

"/var/www/user/site.com/logs/*.log"   {
        weekly
        missingok
        rotate 8
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                /etc/init.d/apache2 reload > /dev/null
        endscript
}

L'ho lasciato da due settimane ormai e nulla è cambiato per quanto posso dire. Quando lo simulo dalla riga di comando ottengo il seguente output.

user@geneva:/var/lib/logrotate$ /usr/sbin/logrotate -d /etc/logrotate.d/apache2
reading config file /etc/logrotate.d/apache2
reading config info for "/var/www/user/site.com/logs/*.log" 

Handling 1 logs

rotating pattern: "/var/www/user/site.com/logs/*.log"     weekly (8 rotations)
empty log files are not rotated, old logs are removed
considering log /var/www/user/site.com/logs/access.log
  log does not need rotating
considering log /var/www/user/site.com/logs/error.log
  log does not need rotating
not running postrotate script, since no logs were rotated

Qualche idea su ciò che Iv'e ha configurato male?

Anche il mio file di stato è vuoto :(

user@geneva:~$ cat /var/lib/logrotate/status
logrotate state -- version 2

Aggiornare

Ho cancellato il file di stato e ho eseguito forzatamente logrotate e ora i registri sembrano essere stati ruotati e il file di stato sembra più promettente!

sudo rm /var/lib/logrotate/status

sudo /usr/sbin/logrotate -f /etc/logrotate.conf

Risposte:


17

Penso che ciò weeklysignifichi che logrotate vuole vedere una voce di almeno una settimana per il tuo file access.log per poterlo ruotare.

Quindi il problema sembra essere che non si sta memorizzando la voce di stato per attivare la rotazione.


Ecco un esempio dettagliato del semplice caso, di come logrotate decide di ruotare un file di registro
(questi sono percorsi fedora, Ubuntu, Centos ecc. Possono essere diversi)

(Ho fatto alcune richieste http://localhostquindi ci sono alcune voci in access_log, altrimenti logrotate non ruota mai ...)

Quindi ho impostato il mio logrotate per apache su settimanalmente in questo modo;

/var/log/httpd/*log {
        weekly
...
}

e originariamente non vi è alcuna voce nel /var/lib/logrotate.statusfile

# grep access_log /var/lib/logrotate.status
<- nothing

Quindi logrotate non ruota il access_logfile;

 #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd 
 ...
considering log /var/log/httpd/access_log
  log does not need rotating

Tuttavia, se eseguo logrotate manualmente in questo modo;

#  /usr/sbin/logrotate   /etc/logrotate.d/httpd 

esiste ora una voce nel file di stato per httpd access_log;

 # grep access_log /var/lib/logrotate.status
 "/var/log/httpd/access_log" 2012-5-11

Tuttavia, Apache non ruoterà ancora il registro, poiché la voce ha solo 0 giorni (2012-5-11);

  #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd 
 considering log /var/log/httpd/access_log
   log does not need rotating

Tuttavia, se modifichi il file di stato con vi, vi /var/lib/logrotate.statusquindi qualcosa del genere per impostare la data su più di una settimana ...;

 # grep access_log /var/lib/logrotate.status
 "/var/log/httpd/access_log" 2012-4-11    <---    more than a week ago..

Quindi logrotate ora ruota correttamente il file a causa della data nel file di stato che 2012-4-11è più di una settimana fa da oggi2012-5-11

 #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd
 considering log /var/log/httpd/access_log
 log needs rotating           <---    logrotate rotates the file.

(tenere presente che le -dcause avvengono a secco, quindi è utile solo per l'ispezione, è necessario eseguire effettivamente il comando senza -deffettuare voci di stato o ruotare file ecc.)


1
I file di registro avevano voci di una settimana fa - Sembrerebbe che funzioni ora, tuttavia credo che lo scoprirò tra una settimana ...
Malachi,

2
Spiacente, avrei potuto essere più chiaro nella risposta, ma penso che per una rotazione settimanale abbia bisogno di una voce nel file /var/lib/logrotate.statuscon una data di almeno una settimana. Ho aggiornato la risposta con un esempio ...
Tom H,

Grazie per una spiegazione così chiara - Capisco perfettamente il lato data delle cose, è solo che non ruotano a meno che non chiami manualmente il comando ... È come se CRON non stesse chiamando il registro ruota?
Malachi,

Sono relativamente nuovo nell'amministrazione Linux ... All'interno di /etc/cron.daily/logrotate/ c'è: #! / Bin / sh test -x / usr / sbin / logrotate || uscita 0
Malachia,

7
log does not need rotating

Ciò può essere dovuto al fatto che i file di registro sono vuoti.
Questa situazione può verificarsi perché apache continua a scrivere in un file di registro precedente, che è stato rinominato senza riavviare apache. Quindi access.log è diventato access.log.1 e l'apache lo scrive.

Oppure hai un problema con l'ora di creazione del registro:

ls -al --time=ctime /var/www/user/site.com/logs/

È possibile commentare la notifemptyriga per gestire i registri a 0 byte che non ruotano. Quindi vorrai touchun nuovo file di registro prima di ogni test in modo che logrotate abbia qualcosa da ruotare.
Banjer,

6

Ho affrontato il problema simile, tranne per il fatto che nessuna di queste risposte mi ha aiutato. Il mio file di registro era enorme e vecchio, la mia configurazione era ok e valida al 100%, la rimozione del file di stato non ha aiutato.

Si è scoperto che il problema era nelle voci duplicate di logrotate . Quando eseguo logrotate manualmente sul mio file di configurazione in questo modo:

logrotate -df /etc/logrotate.d/my_service_name

non mostrava alcun errore, diceva solo:

log does not need rotating

Ancora non so perché in realtà. Ma quando eseguo un comando logrotate completo in questo modo:

logrotate -f /etc/logrotate.conf

Ho ottenuto la seguente riga:

error: my_service_name:1 duplicate log entry for /var/log/nginx/my_service_name.access.log

Si è scoperto che il file di configurazione logrotate per il mio servizio conteneva le voci per la rotazione dei registri di accesso nginx e i registri del servizio stesso. E questo è in conflitto con la configurazione di ngnix logrotate, che ha una regola per tutte le voci di nginx:

# grep nginx /etc/logrotate.d/*
/etc/logrotate.d/nginx:/var/log/nginx/*.log {

Quindi la soluzione per il mio caso è piuttosto semplice: ho solo dovuto eliminare la regola di rotazione dei registri nginx in conflitto dalla mia configurazione .

Suppongo che logrotate abbia iniziato a interrompere l'elaborazione del file sui conflitti delle regole solo da una delle versioni più recenti. Ottengo questo errore con v.3.8.7 ma sotto v.3.7.8 con la stessa configurazione in conflitto scrive lo stesso errore ma ruota bene. Anche se non sono riuscito a trovare alcuna traccia di ciò nel log log di Logrotate.


sembra che tu abbia ragione sulle versioni più recenti. Avevo anche voci duplicate; ma quando si esegue logrotate manualmente; ha funzionato bene. Di notte restituisce valore 0; ma non aveva funzionato correttamente ...
Chris Maes,

2

Prova a eseguire sudo logrotate -f --verbose /etc/logrotate.d/apache2 Vedi cosa è scritto nella console e correggi tutto ciò che è sbagliato.


0

Avevo una macchina Debian 7 che, a seguito di un aggiornamento del sistema, non ruotava più i registri di posta. Tutti gli altri registri, tranne quelli di posta, sono stati ruotati correttamente. Ho scoperto che i registri della posta erano cresciuti di diversi gigabyte. Ho sempre gestito la rotazione dei registri tramite Webmin. Quindi, correndo logrotate -d /etc/logrotate.confho visto il seguente messaggio:

Ignoring rsyslog.dpkg-old, because of .dpkg-old ending

È venuto fuori che le mie voci di rotazione della posta erano elencate in /etc/logrotate.d/rsyslog.dpkg-old, che è stato ignorato! La ridenominazione del file ha corretto la rotazione del file di registro :-)

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.