GNU/Linux >> Tutoriels Linux >  >> Linux

Comment suivre -f le dernier fichier journal avec un modèle donné

Je n'ai pas testé cela, mais une approche qui pourrait fonctionner serait d'exécuter un processus d'arrière-plan qui crée et met à jour un lien symbolique vers le dernier fichier journal, puis vous feriez tail -f (ou tail -F ) le lien symbolique.


Je pense que la solution la plus simple est la suivante :

tail -f `ls -tr | tail -n 1`

Maintenant, si votre répertoire contient d'autres fichiers journaux comme "SystemLog" et que vous ne voulez que le dernier fichier "SoftwareLog", alors vous incluez simplement un grep comme suit :

tail -f `ls -tr | grep SoftwareLog | tail -n 1`

[Edit :après une rapide recherche d'outil sur Google]

Vous voudrez peut-être essayer le multitail - http://www.vanheusden.com/multitail/

Si vous voulez vous en tenir à la réponse de Dennis Williamson (et je lui ai attribué +1 en conséquence), voici les blancs remplis pour vous.

Dans votre shell, exécutez le script suivant (ou son équivalent zsh, je l'ai préparé dans bash avant de voir la balise zsh) :

#!/bin/bash

TARGET_DIR="some/logfiles/"
SYMLINK_FILE="SoftwareLog.latest"
SYMLINK_PATH="$TARGET_DIR/$SYMLINK_FILE"

function getLastModifiedFile {
    echo $(ls -t "$TARGET_DIR" | grep -v "$SYMLINK_FILE" | head -1)
}

function getCurrentlySymlinkedFile {
    if [[ -h $SYMLINK_PATH ]]
    then
        echo $(ls -l $SYMLINK_PATH | awk '{print $NF}')
    else
        echo ""
    fi
}

symlinkedFile=$(getCurrentlySymlinkedFile)
while true
do
    sleep 10
    lastModified=$(getLastModifiedFile)
    if [[ $symlinkedFile != $lastModified ]]
    then
        ln -nsf $lastModified $SYMLINK_PATH
        symlinkedFile=$lastModified
    fi
done

Contexte de ce processus en utilisant la méthode normale (encore une fois, je ne connais pas zsh, donc cela pourrait être différent)...

./updateSymlink.sh 2>&1 > /dev/null

Alors tail -F $SYMLINK_PATH pour que la queue donne le changement du lien symbolique ou une rotation du fichier.

C'est un peu compliqué, mais je ne connais pas d'autre moyen de le faire avec la queue. Si quelqu'un d'autre connaît un utilitaire qui gère cela, alors laissez-le avancer parce que j'aimerais aussi le voir moi-même - des applications comme Jetty par défaut se connectent de cette façon et je scripte toujours un script de liaison symbolique exécuté sur un cron pour compenser pour cela.

[Edit :Suppression d'un 'j' erroné à la fin de l'une des lignes. Vous aviez également un mauvais nom de variable "lastModifiedFile" qui n'existait pas, le nom correct que vous avez défini est "lastModified"]


Linux
  1. Comment créer un fichier avec une taille donnée sous Linux ?

  2. Comment afficher le résultat de grep avec le chemin complet ou le nom de fichier

  3. Comment puis-je installer le dernier Anaconda avec wget

  4. Comment combiner la commande 'tar' avec 'find'

  5. Comment imprimer la dernière ligne d'un fichier compressé gz dans la ligne de commande ?

Comment utiliser la commande chgrp avec des exemples

Comment rechercher des fichiers avec des dizaines de critères avec la commande Bash Find

HowTo:Le didacticiel de commande ultime Logrotate avec 10 exemples

tar -C avec un modèle de fichier générique

Comment remplir un fichier avec FF en utilisant dd ?

Comment mettre à niveau vers la dernière version de PHP dans CentOS avec yum ?