GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie man -f die neueste Protokolldatei mit einem bestimmten Muster tailt

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


Linux
  1. So ändern Sie den Pfad der auditd-Protokolldatei /var/log/audit/audit.log

  2. So überprüfen Sie die Integrität einer Datei mit der md5-Prüfsumme

  3. Wie erstelle ich eine Datei mit einer bestimmten Größe in Linux?

  4. So zeigen Sie grep-Ergebnisse mit vollständigem Pfad oder Dateinamen an

  5. Wie kann ich das neueste Anaconda mit wget installieren

Verwendung des chgrp-Befehls mit Beispielen

So finden Sie Dateien mit Dutzenden von Kriterien mit dem Bash-Suchbefehl

HowTo:Das ultimative Logrotate-Befehls-Tutorial mit 10 Beispielen

So kombinieren Sie den Befehl „tar“ mit „find“

Wie drucke ich die letzte Zeile einer gz-komprimierten Datei in der Befehlszeile?

Wie aktualisiere ich mit yum auf die neueste PHP-Version in CentOS?