web-dev-qa-db-fra.com

Existe-t-il un moyen approprié d'effacer les journaux?

Je me demandais s'il y avait un moyen approprié d'effacer les journaux en général?

Je suis nouveau sur Ubuntu et j'essaie de configurer Postfix. La connexion en question est /var/log/mail.log. Je me demandais s'il y avait un moyen correct de l'effacer, plutôt que de me lancer dedans et de supprimer toutes les lignes et de l'enregistrer. Je constate que parfois des erreurs ne sont pas écrites immédiatement après avoir effacé le journal et l'enregistrer.

Remarque: j'ai du mal à configurer Postfix et j'essaie de faciliter la lecture des journaux en espérant que cela puisse m'aider, au lieu d'avoir à faire défiler complètement vers le bas.

69
mastofact

Vous pouvez utiliser:

> /var/log/mail.log

Cela tronquera le journal sans que vous ayez à modifier le fichier. C'est également un moyen fiable de récupérer l'espace. Parfois, les gens font l'erreur d'utiliser rm dans le journal puis de recréer le nom de fichier, si un autre processus a le fichier ouvert, vous ne récupérez pas l'espace jusqu'à ce que ce processus ferme sa gestion et que vous puissiez gâcher ses autorisations.

De plus, si vous regardez le contenu du journal, vous pouvez utiliser la commande tail:

tail -f /var/log/mail.log

Ctrl-C rompra la queue.

84
davey

Oui, il existe un moyen approprié: vous n'effacez pas les journaux du tout. Vous les faites pivoter . La rotation implique de basculer la sortie du journal vers un nouveau fichier, sous le même nom, avec les N fichiers journaux précédents conservés sous un ensemble de N noms de fichiers associés.

La façon dont on fait tourner les journaux dépend de la façon dont on les écrit en premier lieu. C'est un point souvent ignoré. Certaines des réponses ici le touchent au moins, mentionnant que certains programmes de journalisation gardent un descripteur de fichier ouvert pour le fichier journal, donc la simple suppression du fichier ne libérera pas de l'espace, ni même basculera la sortie vers un nouveau fichier journal.

Si le programme qui écrit le fichier journal est multilog du package daemontools , par exemple, alors vous ne faites rien pour faire tourner les journaux du tout - pas de manuel scripts, pas de travaux cron. Dites simplement à multilog que la sortie du journal est vers un répertoire, et il conservera lui-même un ensemble de N fichiers journaux automatiquement tournés et limités dans ce répertoire.

Si le programme qui écrit les fichiers journaux est svlogd du package runit , pour un autre exemple, alors la même chose s'applique. Vous ne faites rien du tout à part pointer l'outil sur un répertoire. Il conservera lui-même un ensemble de N fichiers journaux pivotés automatiquement et limités en taille dans ce répertoire.

Si vous utilisez rsyslog pour écrire des fichiers journaux, alors le programme de journalisation peut s'arrêter une fois que le fichier journal a atteint une certaine taille et exécuter un script . Vous devez écrire la viande du script, pour renommer réellement le fichier journal et supprimer les anciens fichiers journaux en fonction des contraintes de taille totale, mais au moins le programme de journalisation a fermé le fichier et suspendu l'écriture du journal pendant que cela se produit.

L'ancienne façon syslogd de faire tourner les journaux, toujours attendue en enregistrant des programmes tels que syslog-ng et comme illustré par des outils tels que logrotate mentionnés par djangofan dans une autre réponse ici, est un peu plus aléatoire. L'un exécute un travail cron qui renomme périodiquement les fichiers journaux et redémarre le démon de journalisation (en utilisant le superviseur de démon sous lequel il s'exécute). Le problème avec cela, bien sûr, c'est qu'il n'impose pas un plafond de taille globale. Les semaines lentes, on peut obtenir N très petits fichiers journaux quotidiens, tandis que les jours occupés, on peut obtenir 1 très gros fichier journal qui dépasse largement la taille limite.

C'est pourquoi des outils plus récents et de meilleure qualité comme multilog et svlogd ont des options de configuration de taille de fichier et vérifient en fait les tailles de fichier journal elles-mêmes, bien sûr. Le monde a appris que l'interrogation des journaux sur une planification avec des travaux cron, ou même un démon logrotate, laisse des fenêtres pour que la taille soit incorrecte et que le bon endroit pour avoir ces vérifications, et ainsi rigoureusement appliquer des limites de taille définies par l'administrateur afin que les fichiers journaux ne avalent jamais la partition sur laquelle ils se trouvent, se trouve dans le programme qui est écrivant en fait les fichiers en premier lieu.

26
JdeBP

Vous pouvez également l'utiliser.

truncate /opt/package/logs/*.log --size 0

Ici, tous les fichiers journaux dans/opt/package/logs seront vides.

18
Yasar

Oui, il existe un outil pour Linux appelé LogRotate .

11
djangofan

Si la raison pour laquelle vous effacez le journal est pour libérer de l'espace, vous pouvez leur attribuer cat/dev/null, sans interrompre les programmes qui y écrivent. Ne les supprimez jamais! certains logiciels peuvent se plaindre en cessant de fonctionner ou en ignorant complètement le journal jusqu'au prochain redémarrage

cat /dev/null > /path/to/logfile

# to empty all the logs in a directory
for i in /var/log/*; do cat /dev/null > $i; done
10
Elvis

Écrasement de contenu court et compatible: : > /dest/file

Mais il existe également un appel système tronqué (2) et l'outil correspondant de l'espace utilisateur truncate sur de nombreux * NIX.

4
poige

Voici comment je le fais, et c'est juste pour NGINX, vous pouvez le supprimer pour le faire fonctionner sur tous les fichiers journaux.

# Clear nginx logs.
# @usage delnginxlogs
function delnginxlogs() {
  echo "--------------- ⏲  Clearing logs... ---------------"

  # Clear logs.
  for i in /var/log/nginx/*; do cat /dev/null > $i; done

  echo "--------------- ⏲  Deleting .gz log files... ---------------"

  # Delete .gz files.
  find /var/log/nginx -type f -regex ".*\.gz$" -delete

  echo "--------------- ???? DONE: NGINX logs cleared ... ---------------"
}
1
Ahmad Awais

Si vous souhaitez conserver le fichier avant de le nettoyer, vous pouvez:

cp /var/log/mail.log /var/log/mail.log.1 && echo -n "" > /var/log/mail.log

Si vous souhaitez rechercher un texte ou un e-mail spécifique dans le journal, vous pouvez utiliser grep. Si vous souhaitez conserver des graphiques sur l'utilisation du courrier, vous pouvez utiliser AWStats.

1
ghm1014