5 votes

Comment effectuer une rotation manuelle du journal sans logrotate sur un fichier ouvert/live ?

Mon Google-Fu me rapproche de l'objectif, mais je n'y parviens pas tout à fait, et je pense que je suis trop novice en matière de Linux pour rassembler les pièces du puzzle.

J'ai un très gros fichier journal de plus de 200 Go, qui est toujours en cours d'écriture. Logrotate ne l'atteindra pas à temps pour que l'espace disque devienne un problème. De plus, je ne veux pas déclencher un autre cycle de logrotate car je ne veux pas qu'elle affecte toutes les autres cibles dans sa configuration. J'ai ajouté la nouvelle strophe dans mon fichier logrotate.conf comme tel :

/log/myDevice/myDevice.log {
  compress
  daily
  rotate 360
  maxage 360
  missingok
  compresscmd /usr/bin/xz
  dateext
  compressext .xz
  copytruncate
  olddir /log/archive/myDevice
}

Je voudrais faire ces choses manuellement :

  1. copytruncate : pour supprimer le fichier journal actuel, mais permettre à syslog-ng de continuer à travailler sur le fichier ouvert/live actuel.
  2. (pas ci-dessus dans le fichier logrotate.conf) split Le système de gestion de l'information est le suivant : pour découper le rouleau de bois actuel en plus petits morceaux
  3. xz compresser dans le dossier d'archivage

Je peux split(1) y xz(1) mais lorsque j'essaie d'extraire le fichier cible, je n'y arrive pas.

J'ai essayé sudo mv myDevice.log ZmyDevice.log && touch myDevice.log mais syslog-ng se contente de déplacer le fichier d'origine (et son nouveau nom) et continue à écrire joyeusement. Ce qui m'a semblé logique lorsque j'ai pensé à la façon dont le fichier est référencé par syslog-ng.

J'essaie donc de trouver un moyen de faire une sorte de manuel. copytruncate afin de remplacer le fichier par un autre "en place", pour ainsi dire, et laisser syslog-ng continuer à faire ce qu'il veut.

2voto

Craig Miskell Points 3976

Déplacez le fichier, puis envoyez un SIGHUP au processus syslog-ng :

kill -HUP

ce qui l'amènera à rouvrir tous ses fichiers ouverts, libérant ainsi le fichier que vous venez de déplacer/renommer et vous permettant de continuer. Il ouvrira alors le fichier /log/myDevice/myDevice.log et commencera à y écrire.

0voto

Michael Martinez Points 2505

Recherchez les processus dans lesquels le fichier est ouvert : fuser /path/to/file . Ensuite, utilisez kill -SIGSTOP pour suspendre le(s) processus qui écrit(nt) dans le fichier. Ensuite, faites pivoter le fichier, copiez-le, tronquez-le, selon vos besoins, puis reprenez le(s) processus avec kill -SIGCONT .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X