Как выследить-f последний файл журнала с данным шаблоном

Я работаю с некоторой системой журнала, которая создает файл журнала каждый час, как следует:

SoftwareLog.2010-08-01-08
SoftwareLog.2010-08-01-09
SoftwareLog.2010-08-01-10

Я пытаюсь выследить для следования за последним файлом журнала, дающим шаблон (например, SoftwareLog*), и я понимаю, что существует:

tail -F (tail --follow=name --retry)

но это только следует за одним собственным именем - и они имеют различные имена по дате и час. Я попробовал что-то как:

tail --follow=name --retry SoftwareLog*(.om[1])  

но подстановочный оператор является resoved, прежде чем он будет передан хвосту и не повторно выполнит каждый раз повторения хвоста.

Какие-либо предложения?

10
задан Axiverse 5 August 2010 в 15:42
поделиться

2 ответа

[Изменить: после быстрого поиска в Google инструмента]

Вы можете попробовать мультитейл - http://www.vanheusden.com/multitail/

Если вы хотите придерживаться ответа Денниса Уильямсона (и я поставил ему +1 соответственно), вот вам заполненные пробелы.

Запустите в своей оболочке следующий скрипт (или его эквивалент в zsh, я использовал его в bash до того, как увидел тег 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

Фон этого процесса с использованием обычного метода (опять же, я не знаю zsh , поэтому он может быть другим) ...

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

Затем tail -F $ SYMLINK_PATH , чтобы хвост передал изменение символическая ссылка или ротация файла.

Это немного запутано, но я не знаю другого способа сделать это с хвостом. Если кто-то еще знает об утилите, которая справляется с этим, позвольте им сделать шаг вперед, потому что я тоже хотел бы увидеть это сам - такие приложения, как Jetty, по умолчанию ведут журналы таким образом, и я всегда создаю сценарий символической ссылки, запускаемый в cron, чтобы компенсировать для этого.

[Edit: Удалено ошибочное "j" в конце одной из строк. У вас также было неправильное имя переменной "lastModifiedFile" не существует, правильное имя, которое вы установили, - "lastModified"]

7
ответ дан 3 December 2019 в 17:18
поделиться

Я не тестировал это, но подход, который может сработать, заключается в запуске фонового процесса, который создает и обновляет символическую ссылку на последний файл журнала, а затем вы должны tail -f (или tail -F ) символическая ссылка.

3
ответ дан 3 December 2019 в 17:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: