GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo rastrear -f el último archivo de registro con un patrón dado

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


Linux
  1. Cómo verificar la integridad de un archivo con md5 checksum

  2. Cómo mostrar el resultado de grep con la ruta completa o el nombre del archivo

  3. tar -C con un patrón de archivo comodín

  4. ¿Cómo rellenar un archivo con FF usando dd?

  5. Cómo encontrar el archivo .pid para un proceso dado

Cómo usar el comando chgrp con ejemplos

Cómo vaciar un archivo de registro en Linux

Cómo encontrar archivos con docenas de criterios con el comando Bash Find

HowTo:El último tutorial del comando Logrotate con 10 ejemplos

¿Cómo imprimir la última línea de un archivo comprimido gz en la línea de comando?

¿Cómo actualizo a la última versión de PHP en CentOS con yum?