Apache2 e logrotate: delaycompress necessario?


8

Attualmente sto osservando la dimensione del file dei miei registri Apache man mano che sono diventati enormi. Nella mia configurazione logrotate, ho delaycompressabilitato. Apache ha davvero bisogno di questo (come dice la documentazione di logrotate che alcuni programmi scrivono ancora nel vecchio file) o è sicuro disabilitarlo delaycompress?

Ecco la mia configurazione logrotate:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 26 
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
            if [ -f /var/run/apache2.pid ]; then
                    /etc/init.d/apache2 restart > /dev/null
            fi
    endscript
}

Risposte:


7

Se stai eseguendo un riavvio di Apache (o anche "aggraziato") chiuderà gli handle di file aperti e li riaprirà. Non dovresti aver bisogno di delaycompress perché il file sarà stato chiuso e riaperto come parte del riavvio postrotate.

rotate access_log -> access_log.1 (rename action, no INODE change)
apache still writing to access_log.1 (same open FD on same INODE)
apache restart (close FD, release INODE writing)
apache writing to access_log (new FD to a new INODE)

Un riavvio è una specie di cattiva idea: cosa succede se il file di configurazione viene accidentalmente modificato e non è più valido? Il tuo apache non si riavvierà. Invia invece un HUP al processo padre che gli dice di chiudere / riaprire gli handle di file.

postrotate
  /bin/kill -HUP `cat /var/run/apache2.pid 2>/dev/null` 2>/dev/null || true
endscript

cat fallirà se il PID è mancante (o vuoto o non valido) causando il fallimento anche dell'uccisione, quindi non è necessario il if..thenblocco attorno ad esso.


YMMV ma trovo che questa sia una bella risposta
asdmin,

0

Hm, in questo caso, probabilmente, poiché Apache mantiene aperti i registri.

Una cosa che puoi provare è la rotatelogssceneggiatura. Fa parte del apache2-utilspacchetto, almeno qui sulla mia workstation Ubuntu. Un altro approccio sarebbe quello di ruotarli quotidianamente anziché settimanalmente, quindi si esegue il buffering di meno prima della compressione.


Probabilmente avrei dovuto aggiungere il mio logrotate config alla domanda precedente - come postrotate ho impostato un riavvio di apache2.
j0nes,
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.