Non l'ho provato, ma un approccio che potrebbe funzionare sarebbe quello di eseguire un processo in background che crei e aggiorni un collegamento simbolico all'ultimo file di registro e quindi faresti tail -f
(o tail -F
) il collegamento simbolico.
Credo che la soluzione più semplice sia la seguente:
tail -f `ls -tr | tail -n 1`
Ora, se la tua directory contiene altri file di registro come "SystemLog" e desideri solo l'ultimo file "SoftwareLog", allora dovresti semplicemente includere un grep come segue:
tail -f `ls -tr | grep SoftwareLog | tail -n 1`
[Modifica:dopo una rapida ricerca su Google di uno strumento]
Potresti voler provare multitail - http://www.vanheusden.com/multitail/
Se vuoi restare fedele alla risposta di Dennis Williamson (e gli ho fatto +1 di conseguenza) ecco gli spazi vuoti riempiti per te.
Nella tua shell, esegui il seguente script (o è l'equivalente zsh, l'ho montato in bash prima di vedere il tag 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
Sfondo di quel processo usando il metodo normale (di nuovo, non conosco zsh, quindi potrebbe essere diverso)...
./updateSymlink.sh 2>&1 > /dev/null
Quindi tail -F $SYMLINK_PATH
in modo che la coda porti il cambio del link simbolico o una rotazione del file.
Questo è leggermente contorto, ma non conosco un altro modo per farlo con la coda. Se qualcun altro conosce un'utilità che gestisce questo, lascia che si faccia avanti perché mi piacerebbe vederlo anche io - applicazioni come Jetty per impostazione predefinita eseguono i log in questo modo e scrivo sempre uno script di collegamento simbolico eseguito su un cron per compensare per questo.
[Modifica:rimossa una "j" errata dalla fine di una delle righe. Avevi anche un nome di variabile errato "lastModifiedFile" non esisteva, il nome corretto che hai impostato è "lastModified"]