Come evitare il ricaricamento di Apache durante la rotazione dei registri?


25

Uso logrotate per ruotare i registri di accesso, errore e riscrittura di Apache. Il mio file di configurazione è simile al seguente:

/apache/*log {
    compress
    dateext
    rotate 365
    size=+300M
    olddir /log/old/apache
    notifempty
    missingok
    lastaction
     /bin/apache reload
    endscript
}

Il mio problema è che ogni volta che si verifica una rotazione, Apache deve essere ricaricato perché Apache non scrive più nel file di registro appena ruotato. C'è un modo per evitare il ricaricamento di Apache ogni volta che logrotate esegue una rotazione?

Risposte:


42

Il motivo per cui Apache ha bisogno di essere ricaricato è che una volta aperto un file, riceve un filehandle e continuerà a scrivere su quel filehandle. Quando sposti il ​​file, non lo vede, continua a scrivere nello stesso handle. Quando esegui una ricarica, aprirà di nuovo il file e otterrai un nuovo handle.

Per evitare il ricaricamento, invece di spostare il file, è possibile copiarlo e svuotare il vecchio file. In questo modo apache può continuare a scrivere nello stesso filehandle. Puoi farlo aggiungendo l'opzione "copytruncate" al file di configurazione logrotate, in questo modo:

/apache/*log {
    copytruncate
    compress
    dateext
    rotate 365
    size=+300M
    olddir /log/old/apache
    notifempty
    missingok
}

Grazie per la tua risposta. Quindi suppongo che quando aggiungo lastaction echo "" | /apache/*log endscriptil filehandle non sia "perso"?
arpa,

3
Mi dispiace, avrei dovuto dire "copytruncate" anziché "copy". Quindi non hai bisogno dell'ultima cosa. Ho la colpa di avere troppo sangue nel mio flusso di caffeina :-)
Jenny D

Funziona come un incanto :)
arpa il

4
@harp stai attento, logrotatedoc dice: "Nota che c'è un intervallo di tempo molto piccolo tra la copia del file e il suo troncamento, quindi alcuni dati di registrazione potrebbero andare persi."
Totor,

Oltre alla possibilità che alcuni dati possano andare persi, ci sono altri aspetti negativi noti da utilizzare copytruncate?
Leo Galleguillos,

5

Ti consiglio di usare http://cronolog.org/

Ecco come lo uso:

CustomLog     "|/usr/local/sbin/cronolog -S /var/log/httpd/t3.CCC.eu-access_log -P /var/log/httpd/t3.CCC.eu-access_log.prev /var/log/httpd/t3.CCC.eu-%Y.log" combined

1
Il piping a qualsiasi programma esterno può essere un problema se c'è molto traffico al web server. Ma evita perfettamente il problema del filehandle.
Jenny D,

Sembra una buona alternativa. Cronolog si comprime al volo?
arpa,

Esiste un'app simile "rotatelogs" nel pacchetto apache2-utils. Fai solo attenzione a non "convogliare" nello stesso file di registro da diversi server virtuali Apache: si calpesteranno l'un l'altro.
Arie Skliarouk,
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.