Я работаю с некоторой системой журнала, которая создает файл журнала каждый час, как следует:
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, прежде чем он будет передан хвосту и не повторно выполнит каждый раз повторения хвоста.
Какие-либо предложения?
[Изменить: после быстрого поиска в 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"]
Я не тестировал это, но подход, который может сработать, заключается в запуске фонового процесса, который создает и обновляет символическую ссылку на последний файл журнала, а затем вы должны tail -f
(или tail -F
) символическая ссылка.