Apache2 et logrotate: délai de compression nécessaire?

8

Je regarde actuellement la taille du fichier de mes journaux Apache car ils sont devenus énormes. Dans ma configuration logrotate, j'ai delaycompressactivé. Apache a-t-il vraiment besoin de cela (comme la documentation de logrotate indique que certains programmes écrivent toujours dans l'ancien fichier) ou est-il sûr de désactiver delaycompress?

Voici ma configuration 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
}
j0nes
la source

Réponses:

7

Si vous effectuez un redémarrage Apache (ou même «gracieux»), il fermera les poignées de fichier ouvertes et les rouvrira. Vous ne devriez pas avoir besoin de delaycompress car le fichier aura été fermé et rouvert dans le cadre de votre redémarrage post-rotation.

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 redémarrage est en quelque sorte une mauvaise idée - que faire si le fichier de configuration a accidentellement changé et n'est plus valide? Votre apache ne redémarrera pas. Envoyez plutôt un HUP au processus parent qui lui dit de fermer / rouvrir les descripteurs de fichiers.

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

cat échouera si le PID est manquant (ou vide, ou invalide) provoquant l'échec de kill aussi vous n'avez pas besoin du if..thenbloc autour de lui.

Martijn Heemels
la source
YMMV mais je trouve que c'est une bonne réponse
asdmin
0

Hrm, dans ce cas, probablement, car Apache garde les journaux ouverts.

Une chose que vous pouvez essayer est le rotatelogsscript. Cela fait partie du apache2-utilspackage, du moins ici sur ma station de travail Ubuntu. Une autre approche consisterait à les faire pivoter quotidiennement plutôt qu'hebdomadairement, de sorte que vous mettez moins en mémoire tampon avant la compression.

McJeff
la source
Aurait probablement dû ajouter ma configuration logrotate dans la question ci-dessus - en tant que postrotate, j'ai mis en place un redémarrage d'apache2.
j0nes