GNU/Linux >> Znalost Linux >  >> Linux

Jak ohraničit -f nejnovější soubor protokolu s daným vzorem

Netestoval jsem to, ale přístup, který by mohl fungovat, by bylo spustit proces na pozadí, který vytvoří a aktualizuje symbolický odkaz na nejnovější soubor protokolu, a pak byste tail -f (nebo tail -F ) symbolický odkaz.


Věřím, že nejjednodušší řešení je následující:

tail -f `ls -tr | tail -n 1`

Nyní, pokud váš adresář obsahuje další soubory protokolu, jako je „SystemLog“ a chcete pouze nejnovější soubor „SoftwareLog“, pak byste jednoduše zahrnuli grep takto:

tail -f `ls -tr | grep SoftwareLog | tail -n 1`

[Edit:po rychlém googlování nástroje]

Možná budete chtít vyzkoušet multitail - http://www.vanheusden.com/multitail/

Pokud se chcete držet odpovědi Dennise Williamsona (a podle toho jsem mu dal +1), zde jsou pro vás vyplněná prázdná místa.

Ve vašem shellu spusťte následující skript (nebo je to ekvivalent zsh, to jsem vymyslel v bash, než jsem viděl značku 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

Pozadí tohoto procesu pomocí normální metody (opět neznám zsh, takže to může být jiné)...

./updateSymlink.sh 2>&1 > /dev/null

Poté tail -F $SYMLINK_PATH tak, že ocas ručí za změnu symbolického odkazu nebo otočení souboru.

Je to trochu zamotané, ale neznám jiný způsob, jak to udělat s ocasem. Pokud někdo ví o nástroji, který to zvládá, ať udělá krok vpřed, protože bych to rád viděl i já - aplikace jako Jetty ve výchozím nastavení provádějí protokoly tímto způsobem a já vždy skriptuji symbolický skript spuštěný na cronu, abych to kompenzoval za to.

[Edit:Odebráno chybné 'j' z konce jednoho z řádků. Také jste měli špatný název proměnné „lastModifiedFile“ neexistoval, správný název, který jste nastavili, je „lastModified“]


Linux
  1. Jak změnit cestu k souboru protokolu auditu /var/log/audit/audit.log

  2. Jak ověřit integritu souboru pomocí kontrolního součtu md5

  3. Shellscript pro sledování souboru protokolu, pokud klíčové slovo spustí a poté provede příkaz?

  1. Jak zobrazit výsledek grep s úplnou cestou nebo názvem souboru

  2. Jak mohu nainstalovat nejnovější Anacondu s wget

  3. Jak zkombinovat příkaz „tar“ s příkazem „najít“

  1. Jak najít proces s maximálním počtem deskriptorů souborů?

  2. Jak vyprázdnit soubor protokolu v Linuxu

  3. Jak upgraduji na nejnovější verzi PHP v CentOS pomocí yum?