J'ai une question pour l'utilisation de logrotate avec Apache2.
Mon Apache crée des logs dans deux dossiers différents :
- des logs "poubelle" qui sont gardés 4 jours (dans un ramdisque pour ne pas user le SSD) ;
- des logs plus classiques, à garder 70 jours.
Voici mon fichier logrotate. La problématique vient des scripts "prerotate" et "postrotate".
Les deux dossiers étant traités à quelques millisecondes d'écart, il n'est pas possible de traiter deux fois le "prerotate" et deux fois le "postrotate".
Voici une solution, pas super élégante, où j'ai mis le "prerotate" (inutilisé dans mon cas) sur le premier dossier et le "postrotate" sur le second dossier.
Si on ne fait pas un invoke-rc.d apache2 reload aprés la rotaiton des logs, apache continue d'écrire dans le même fichier qui a changé de nom : le fichier access.log reste vide alors que access.log.1 continue de recevoir les logs.
Je suis intéressé pour faire la chose proprement, si vous avez des conseils !
$ cat /etc/logrotate.d/apache2
/var/log/apache2/*.log {
daily
missingok
rotate 4
nocompress
notifempty
create 644 root adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then
run-parts /etc/logrotate.d/httpd-prerotate
fi
endscript
postrotate
#if pgrep -f ^/usr/sbin/apache2 > /dev/null; then
# invoke-rc.d apache2 reload 2>&1 | logger -t apache2.logrotate
#fi
endscript
}
/data/log/*.log {
daily
missingok
rotate 70
nocompress
ifempty
create 666 root adm
sharedscripts
prerotate
#if [ -d /etc/logrotate.d/httpd-prerotate ]; then
# run-parts /etc/logrotate.d/httpd-prerotate
#fi
endscript
postrotate
if pgrep -f ^/usr/sbin/apache2 > /dev/null; then
invoke-rc.d apache2 reload 2>&1 | logger -t apache2.logrotate
fi
endscript
}
Encore une question : Quand on change les fichiers de configuration de logrotate, il n'est pas nécessaire de faire une opération type "reload" pour qu'ils soient pris en compte ?