У меня есть файл журнала в формате log_name_YY-MM-DD_HH_mm.log
. Журнал обновляется каждые пару часов, и создается новый журнал, содержащий дату и время его создания. Иногда мне нужно отслеживать текущий вывод этого журнала с помощью tail -f
команда. После поворота журнала хвост по-прежнему указывает на старое имя файла и должен быть перезапущен вручную с новым именем.
Есть ли способ автоматически переключать tail -f
использовать новый файл? В tail -F
вариант (tail --follow=name --retry
) не работает в этом случае, потому что имя файла журнала меняется.
Вы можете создать сценарий для отслеживания самого последнего файла журнала в фоновом режиме, а затем регулярно проверять наличие нового файла журнала. Если есть новый файл журнала, завершите старый процесс и начните отслеживать новый файл.
Что-то вроде:
#!/bin/bash
PATTERN='log_name_??-??-??_??_??.log'
CURRENT=any_pattern # dummy pattern to start off first tail -f
while true; do
NEWLOG=`ls -t $PATTERN|head -n1`
if [[ $NEWLOG != $CURRENT ]]
then
kill $TAILPID 2>/dev/null
CURRENT=$NEWLOG
tail -f $CURRENT &
TAILPID=$!
fi
sleep 1 # check regularly
done