Как следить за последним файлом журнала с помощью tail -f?

#linux #bash #command-line

#linux #bash #командная строка

Вопрос:

У меня есть каталог, который сохраняет новый файл журнала для каждого запуска, поэтому я использую следующую команду для отслеживания последнего файла журнала:

 tail -f $(ls -t | head -1)
  

Итак, мой вопрос заключается в том, есть ли какой-либо способ перейти от одного файла к следующему, если доступен более новый файл журнала, без необходимости останавливать последний tail -f и перезапускать его?

Комментарии:

1. unix.stackexchange.com/questions/22698/…

2. @StephenC Спасибо за ответ, не видел этого вопроса. К сожалению, мои файлы имеют разные имена, так что это не сработает так, как кажется. Кроме того, у меня нет опции a -F, как кажется. Есть ли у вас альтернатива для этого? PS: Если это здесь не подходит, я с радостью перенесу его в SU, но я нашел похожие вопросы по SO, поэтому подумал, что это может подойти

3. Какую версию tail вы используете?

4. Как выглядят имена файлов, из которых вы должны выбирать?

5. @MauriceNino у вас есть доступ к inotify or inotifywait ?

Ответ №1:

Что вы могли бы попробовать, это что-то вроде этого:

 # setup a link that points to the youngest file    
$ for f in *; do [[  ( ! -f last )  || ( "$f" -nt last) ]] amp;amp; ln -sf "$f" last; done
# monitor that file continuously by filename
$ tail -F last
  

запустите следующее в другой оболочке

 while :; for f in *; do [ "$f" -nt last ] amp;amp; ln -sf "$f" last; done
  

Вы также можете запустить это в одной команде как:

 while :; do for f in *; do [[  ( ! -f last )  || ($f -nt last) ]] amp;amp; ln -sf $f last; done; done amp; tail -F last
  

Ответ №2:

-F Флаг for tail поддерживается в версии GNU. (Он находится в коллекции GNU CoreUtils.)

По-видимому, IBM предоставила загрузку для GNU Toolkit для AIX, и, по-видимому, она включает версию tail , поддерживающую эту -F опцию.

Вы могли бы использовать это в сочетании с другими ответами на этот вопрос. (Например, используя tail -F символическую ссылку, которую вы регулярно обновляете.)

В качестве альтернативы, если ни одно из этих решений не работает для вас, вы можете получить исходный код GNU CoreUtils 1 и изменить исходный tail код, чтобы делать то, что вы хотите, и создать его самостоятельно на AIX.


1 — Я не проверял, но я ожидаю, что разработчики IBM вернут любые изменения, которые они вносят в CoreUtils, чтобы заставить его работать на AIX. Если нет, они обязаны предоставить вам исходный код по запросу. В любом случае, получение исходного кода, совместимого с AIX, не должно быть проблемой.

Комментарии:

1. Инструменты GNU обычно легко компилируются в AIX из коробки; по крайней мере, они это делали, когда я пытался пару лет назад. В любом случае, страница, на которую вы ссылались, также предоставляет SRPM.