Question Apache refuse d'écrire dans un fichier journal après avoir supprimé manuellement tout son contenu.


Pourquoi Apache refuse-t-il d'écrire dans les fichiers journaux (le ErrorLog/CustomLog les) après avoir supprimé manuellement leur contenu?

Il n'écrira plus dans ces fichiers journaux qu'après le redémarrage d'Apache.

pourquoi est-ce le cas? Comment puis-je purger en toute sécurité un fichier journal sans avoir à redémarrer Apache?

J'ai Apache 2.2.14 sur Ubuntu 10.04.


8
2017-10-22 13:57


origine


Comment supprimez-vous le contenu? - Dom
@Dom Je viens de l'ouvrir avec vim, faire "dG" (qui supprime tout le contenu), puis enregistrer avec "! Wq". Les droits de propriété / groupe / autorisations ne sont pas modifiés. - AtomicFault
@AtomicFault Probablement parce que c'est pas comment vous êtes censé faire pivoter les journaux Apache. Vous devriez utiliser quelque chose comme logrotate qui envoie un signal de rechargement / redémarrage approprié à Apache (voir la réponse de Pedro ci-dessous). Nickgrim a couvert le "pourquoi" derrière l'arrêt de vos journaux - Apache écrit toujours dans l'ancien inode (qui n'est plus connecté au système de fichiers où que vous puissiez l'obtenir). - voretaq7


Réponses:


Je viens de faire un bref test:

$ echo vim test > vimtest
$ ls -i vimtest
35149 vimtest
$ vim vimtest
<dG, :wq>
$ ls -i vimtest
35148 vimtest

Notez que vimtest a un numéro d’inode différent après l’avoir édité, et est donc en réalité un fichier différent (bien qu’il porte le même nom que l’ancien fichier).

Ainsi, lorsque vous modifiez le fichier avec vim, il supprime l'ancien fichier et en crée un nouveau portant le même nom. Le problème que vous voyez est dû au fait que Apache écrit toujours dans l'ancien fichier (supprimé) (vous pouvez le vérifier avec lsof).

Si vous voulez vraiment tronquer un fichier journal, considérez truncate -s 0 /path/to/file.log (ce qui semble tronquer sur place)


13
2017-10-22 14:13



echo> /path/to/file.log fonctionne aussi


Je recommanderais de forcer la rotation du Apache2 fichiers de log avec:

$ sudo logrotate -f /etc/logrotate.d/apache2

Si vous regardez dans /etc/logrotate.d/apache2, vous verrez que le Apache2 la configuration doit être rechargée après la suppression de son fichier journal avec:

$ sudo /etc/init.d/apache2 reload

Sur Ubuntu, vous pouvez aussi faire:

$ sudo service apache2 reload

7
2017-10-22 14:03