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"]