Ich habe das nicht getestet, aber ein Ansatz, der funktionieren könnte, wäre, einen Hintergrundprozess auszuführen, der einen Symlink zur neuesten Protokolldatei erstellt und aktualisiert, und dann würden Sie tail -f
(oder tail -F
) den symbolischen Link.
Ich glaube, die einfachste Lösung ist wie folgt:
tail -f `ls -tr | tail -n 1`
Wenn Ihr Verzeichnis nun andere Protokolldateien wie „SystemLog“ enthält und Sie nur die neueste „SoftwareLog“-Datei möchten, dann würden Sie einfach ein grep wie folgt einfügen:
tail -f `ls -tr | grep SoftwareLog | tail -n 1`
[Edit:nach kurzem Googeln nach einem Tool]
Vielleicht möchten Sie Multitail ausprobieren - http://www.vanheusden.com/multitail/
Wenn Sie bei Dennis Williamsons Antwort bleiben möchten (und ich habe ihm entsprechend +1 gegeben), sind hier die Lücken für Sie ausgefüllt.
Führen Sie in Ihrer Shell das folgende Skript aus (oder es ist das zsh-Äquivalent, ich habe es in der Bash erstellt, bevor ich das zsh-Tag sah):
#!/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
Hintergrund dieses Prozesses mit der normalen Methode (wiederum kenne ich zsh nicht, also könnte es anders sein) ...
./updateSymlink.sh 2>&1 > /dev/null
Dann tail -F $SYMLINK_PATH
damit der Schwanz das Ändern des symbolischen Links oder eine Drehung der Datei reicht.
Das ist etwas kompliziert, aber ich kenne keinen anderen Weg, dies mit Schwanz zu tun. Wenn jemand anderes ein Dienstprogramm kennt, das dies handhabt, dann lassen Sie ihn vortreten, weil ich es auch gerne selbst sehen würde - Anwendungen wie Jetty protokollieren standardmäßig auf diese Weise, und ich skripte immer ein Symlinking-Skript, das auf einem Cron ausgeführt wird, um dies zu kompensieren dafür.
[Bearbeiten:Ein fehlerhaftes 'j' am Ende einer der Zeilen entfernt. Sie hatten auch einen ungültigen Variablennamen "lastModifiedFile" existierte nicht, der korrekte Name, den Sie festgelegt haben, ist "lastModified"]