3 votes

Suivi continu d'un fichier journal rotatif avec la date et l'heure dans le nom du fichier.

J'ai un fichier journal au format log_name_YY-MM-DD_HH_mm.log . Le journal tourne toutes les deux heures et le nouveau journal est créé avec la date et l'heure de sa création. Parfois, j'ai besoin d'interrompre la sortie en direct de ce journal à l'aide de la commande tail -f commande. Après la rotation du journal, tail pointe toujours vers l'ancien nom de fichier et doit être redémarré manuellement avec le nouveau nom de fichier.

Existe-t-il un moyen de basculer automatiquement tail -f pour utiliser le nouveau fichier ? Les tail -F option ( tail --follow=name --retry ) ne fonctionne pas dans ce cas car le nom de fichier du journal change.

4voto

NZD Points 236

Vous pouvez créer un script pour mettre en attente le fichier journal le plus récent en arrière-plan et vérifier régulièrement la présence d'un nouveau fichier journal. S'il y a un nouveau fichier journal, il faut tuer l'ancien processus et commencer à suivre le nouveau fichier.

Quelque chose comme :

#!/bin/bash

PATTERN='log_name_??-??-??_??_??.log'

CURRENT=any_pattern # dummy pattern to start off first tail -f

while true; do
   NEWLOG=`ls -t $PATTERN|head -n1`
   if [[ $NEWLOG != $CURRENT ]]
   then
      kill $TAILPID 2>/dev/null
      CURRENT=$NEWLOG
      tail -f $CURRENT &
      TAILPID=$!
   fi
   sleep 1 # check regularly
done

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