No he probado esto, pero un enfoque que podría funcionar sería ejecutar un proceso en segundo plano que cree y actualice un enlace simbólico al último archivo de registro y luego tail -f
(o tail -F
) el enlace simbólico.
Creo que la solución más simple es la siguiente:
tail -f `ls -tr | tail -n 1`
Ahora, si su directorio contiene otros archivos de registro como "SystemLog" y solo desea el archivo "SoftwareLog" más reciente, simplemente debe incluir un grep de la siguiente manera:
tail -f `ls -tr | grep SoftwareLog | tail -n 1`
[Editar:después de una búsqueda rápida en Google de una herramienta]
Es posible que desee probar multitail:http://www.vanheusden.com/multitail/
Si quieres quedarte con la respuesta de Dennis Williamson (y le he hecho +1 en consecuencia), aquí tienes los espacios en blanco.
En su shell, ejecute el siguiente script (o su equivalente en zsh, lo preparé en bash antes de ver la etiqueta 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
Ponga en segundo plano ese proceso usando el método normal (nuevamente, no sé zsh, por lo que podría ser diferente)...
./updateSymlink.sh 2>&1 > /dev/null
Entonces tail -F $SYMLINK_PATH
para que la cola entregue el cambio del enlace simbólico o una rotación del archivo.
Esto es un poco complicado, pero no conozco otra forma de hacerlo con la cola. Si alguien más sabe de una utilidad que se encarga de esto, que dé un paso adelante porque me encantaría verlo yo también:las aplicaciones como Jetty, por defecto, hacen registros de esta manera y siempre hago un script de enlace simbólico que se ejecuta en un cron para compensar. por ello.
[Editar:se eliminó una 'j' errónea del final de una de las líneas. También tenía un nombre de variable incorrecto "lastModifiedFile" que no existía, el nombre propio que estableció es "lastModified"]