Назад | Перейти на главную страницу

Постоянное отслеживание изменяющегося файла журнала с указанием даты и времени в имени файла

У меня есть файл журнала в формате 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