[resolut] Logrotate : Apache écrit dans mon ancien fichier

Bonjour j’utilise logrotate pour mes log apache.

J’ai plusieurs virtuals hosts, certains avec des log dans /var/log/apache2 dautre avec des log dans /home/gch/log-apache2

=> les fichiers sont bien “rotés” dans les 2 dossiers ou j’ai mes logs.

  • Dossier /home/gch/log-apache2/*.log => apache écrit dans mon ancien fichier de log, qui a été renommé par logrotate (le fichier en .1 alors que le nouveau fichier est vide)

  • Dossier /var/log/apache2/*.log => apache écrit dans le nouveau fichier (situation normale)

Dans /etc/logrotate.conf , j’ai :
include /etc/logrotate.d

Voici mon fichier /etc/logrotate.d/apache2

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

Savez-vous d’où peut venir ce problème ?

Aprés un simple /etc/init.d/apache2 reload , apache se met a écrire dans les bon fichiers de log. Si il faut lancer cette commande après chaque log-rotate pourquoi pas mais je comprend pas pourquoi pour le dossier /var/log/apache2/*.log ce n’est pas nécessaire de lancer la commande /etc/init.d/apache2 reload

Merci !

J’utilise ubuntu server 6.10

Un problème de logrotate, le démon apache continue à tourner et donc le fichier est toujours ouvert. Tu peux l’appeler alfred si tu veux voir le déplacer (au sein de la même partition), apache continuera à écrire dedans.

Donne ton fichier /etc/logrotate.d/apache

le fichier est copié intégralement dans la partie code de mon premier post.

J’ai fais un copier / coller pour le nouveau dossier et j’ai juste changer la destination.

Merci beaucoup pour ton aide.

Bizarre, ça a l’air correct, y-a-t-il un fichier /var/run/apache2.pid???

Oui le fichier apache2.pid existe ce qui fait qu’il ne devrait pas demander a apache de redémarrer (pas d’exécution de “/etc/init.d/apache2 restart”)

root@ca24:/var/run# cat apache2.pid 1240

on peut toujours forcer un /etc/init.d/apache2 reload dans le postrotate. Cela va résoudre le problème mais je voudrais comprendre pourquoi /etc/init.d/apache2 reload est nécessaire dans un dossier (/home/gch/log-apache2/.log) mais pas dans le dossier d’origine (/var/log/apache2/.log)

Au contraire:

[quote] postrotate
if [ -f /var/run/apache2.pid ]; then
/etc/init.d/apache2 restart > /dev/null
fi [/quote]

fait que après la rotation, si il y a un fichier /var/run/apache2.pid, il redémarre apache (un reload aurait suffit mais bon, c’est plus sûr). Tu devrais mettre

... postrotate if [ -f /var/run/apache2.pid ]; then echo -n "Relance apache: " >> /var/tmp/tempo.log /bin/date >> /var/tmp/tempo.log /etc/init.d/apache2 restart > /dev/null fi

pour voir si apache est effectivement relancé. Pense à supprimer le fichier ~ ou #… si tu édites avec vi ou emacs, logrotate l’exécuteras aussi si il est présent dans /etc/logrotate.d.

Je comprend mieux… en fait le problème c’est que /etc/init.d/apache2 restart doit dans ce cas là etre exécuté 2 fois dans un intervale de temps trés court (dans /home/gch/log-apache2/ il n’y a que 2 fichiers a renomer, cela doit aller vite) et si /etc/init.d/apache2 restart est lancé en parallèle, apache na tout simplement pas encore redémarré, non ?

=> il faudrais mettre les 2 blocs en un seuls vu qu’ils sont identique au chemin pret, mais je ne sais pas comment faire…

Un code comme celui ci-dessous ne doit pas fonctionner…

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

Ça marche SUREMENT, sinon il suffit de faire ce qui suit

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

Je n’avais pas percuté sur les deux emplacements de logs…

Merci pour ton aide.

Pour info,cette écriture fonctionne :

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