Nettoyage des fichiers journaux sous Linux

10

J'utilise une machine virtuelle kvm ubuntu 10.04 pour tester certaines fonctionnalités d'un module du noyau. Je parcoure les /var/logfichiers pour observer les messages du noyau sur ce module.

Pour commencer à partir d'un état propre, je supprime les fichiers journaux contenant des messages plus anciens en exécutant rm -rf /var/log/*puis en redémarrant la machine virtuelle. Cependant, après le redémarrage, les nouveaux fichiers journaux contiennent toujours ces anciens messages de journal. Il faut environ 5-6 cycles de suppression de fichiers et de redémarrage de la machine virtuelle pour enfin se débarrasser de ces messages de fichier journal.

Pourquoi cela arrive-t-il? Existe-t-il un moyen plus simple de nettoyer les fichiers journaux?

contemplant zombie
la source
logrotateest le logiciel Linux officiel sur la suppression et la rotation automatique des journaux.
Hanan N.
Je ne voulais pas tourner. Il suffit de les essuyer.
contemplatingzombie
1
Les éléments suivants semblent fonctionner pour moi: 1. rm -rf / var / log / * 2. dmesg -c 3. reboot Puisque cela fonctionne, je pense que le noyau lit les messages de log précédents lors du démarrage, les garde dans le tampon et les écrit aux fichiers une fois de plus lors du redémarrage. Si quelqu'un en sait plus sur le mécanisme actuel, veuillez le mettre à jour.
contemplatingzombie

Réponses:

7

Le moyen le plus simple de nettoyer les anciens journaux est de ne pas les supprimer.

La meilleure façon de nettoyer les journaux est soit logrotatecomme Hanan N. l'a souligné ou:

find /var/log -type f -exec /bin/cp /dev/null {} \;

pour chacun des fichiers journaux. Je ne sais pas exactement à quelles entrées de journal vous faites référence lors du démarrage précédent, mais si vous voulez que cela soit effacé après le démarrage, vous pouvez mettre la commande ci-dessus dans le /etc/rc.localscript afin que toute la journalisation soit après le démarrage.

Normalement, bien que vous ne souhaitiez pas effacer les journaux, car ils constituent votre point de départ dans tous les dépannages.

Karlson
la source
Je pense que la commande 'cp' copierait tous les journaux sur le dernier nom de fichier étendu ... peut-être que vous vouliez dire find /var/log/* -exec cp /dev/null {} \;:?
jjmontes
@jjmontes Merci. Je n'ai pas pu trouver la commande find à l'époque. :) Mais ce serait en fait modifié comme je l'ai édité
Karlson
3

Pour ce que vous faites, il peut être préférable d'ajouter un fichier journal supplémentaire pour les messages du noyau. Certains démons de journal vous permettront d'effectuer des correspondances sur les enregistrements en cours d'écriture, de sorte que vous n'obteniez que les enregistrements appropriés dans votre fichier. Vous pouvez ensuite faire pivoter, supprimer ou renommer les fichiers entre les exécutions. (Si vous ne redémarrez pas, vous devrez peut-être envoyer un signal HUP au démon de journal pour lui permettre de rouvrir ses fichiers.

Il existe également des outils qui extrairont uniquement les nouveaux enregistrements du journal. L' logtailutilitaire du logcheckpackage est l'un de ces utilitaires. Il peut être exécuté avec un autre fichier offset.

Il existe d'autres outils qui surveillent les journaux pour les enregistrements correspondant à un modèle et les signalant. L'un d'eux pourrait bien fonctionner pour vous.

BillThor
la source
1

Cela semble fonctionner correctement (sur Ubuntu LTS 14.04) en faisant tourner vos journaux vers un journal propre, puis en supprimant les anciennes entrées de journal. C'est similaire à la méthode cp / dev / null, mais je pense que c'est plus propre. ymmv

logrotate --force /etc/logrotate.conf
find /var/log/ -name '*[0-5]*' -exec rm {} \;
flickerfly
la source