Sous Unix, quelle est la meilleure façon de réduire la taille d'un fichier journal massif qui est activement écrit?

11

Sur un serveur Linux, je veux réduire la taille d'un fichier journal qui fait plusieurs Go. Couper la moitié supérieure, ou peut-être que le premier million de lignes fonctionnerait.

Phil
la source

Réponses:

12

Cela revient souvent dans les interviews ...

Cherchez-vous à tronquer le fichier sans perturber les processus? L'une des informations du fichier journal est-elle précieuse? Si c'est le cas, j'ai l'habitude de "mettre à zéro" le fichier avec une simple chaîne bash.

: > /var/log/badlogfile

Cela se produit dans des situations où vous pouvez avoir une application qui ne peut pas être redémarrée de manière contrôlée. Disons que c'est une application de trading financier et que le programme ne peut pas être interrompu ou redémarré pendant la journée de trading. Cependant, les fichiers journaux augmentent à un rythme obscène en raison d'un bogue d'application. La troncature des fichiers journaux à l'aide de la méthode ci-dessus ou ci-dessous peut maintenir le système en marche.

Voir également: http://www.cyberciti.biz/faq/truncate-large-text-file-in-unix-linux/

ewwhite
la source
1
le deux-points est-il censé indiquer une invite, ou est-ce que cela va réellement dans la commande?
Phil
Le deux-points fait partie de la commande.
ewwhite
Vous n'avez pas vraiment besoin des deux points.
MikeyB
C'est un no-op. Ce n'est pas nécessaire, mais j'aime le garder là quand je fais la recommandation.
ewwhite
Cela n'a pas fonctionné pour moi, la taille du journal n'a pas changé. Il est passé à 0, mais est ensuite revenu à sa taille
maximale
2

Vous pouvez le mettre dans logrotate, alors il ne deviendra pas hors de contrôle aussi facilement

netpixie
la source
En fin de compte, cela doit se produire. Je suis nouveau dans ce travail ...
Phil
1

S'il vous est écrit activement, vous n'avez pas grand-chose à faire en tronquant. Vos seules options sont de vider le fichier (vous pouvez d'abord le copier ailleurs.)

echo "" >/var/log/fileYouWantToEmpty

De cette façon, le fichier finit vide mais est toujours le même fichier / inode afin qu'il ne perturbe pas le programme qui se connecte.

Twirrim
la source
0

Vous pouvez également essayer cat / dev / null> / var / log /. Mais, je dois avertir que / dev / null n'est pas implémenté dans certaines des anciennes versions ...

Nandhini Anand
la source
tronquer le fichier ne fonctionne pas pour moi, j'ai fait le test sur centos 7 et sur redhat 5
c4f4t0r