Мы используем tail для постоянного мониторинга нескольких журналов, но когда журнал вращается, хвост для этого файла прекращается.
Насколько я понимаю, проблема в том, что при ротации журнала создается новый файл, а запущенный хвостовой процесс ничего не знает об этом новом дескрипторе файла.
Ах, для этого есть флаг.
Вместо того, чтобы использовать tail -f /var/log/file
мы должны использовать tail -F /var/log/file
tail -F
переводится на tail --follow=name --retry
как в;
--follow=name
: следовать имени файла вместо дескриптора файла--retry
: если файл недоступен, попробуйте еще раз позже, вместо того, чтобы умереть# tail --follow=mylog.log
Из хвост человека:
With --follow (-f), tail defaults to following the file descriptor,
which means that even if a tail’ed file is renamed, tail will continue
to track its end. This default behavior is not desirable when you
really want to track the actual name of the file, not the file descrip‐
tor (e.g., log rotation). Use --follow=name in that case. That causes
tail to track the named file by reopening it periodically to see if it
has been removed and recreated by some other program.
Итак, в этом случае использование -F
вариант будет правильным.
-F same as --follow=name --retry
Точный ответ зависит от вашей ОС, но во многих случаях tail -F
поступит правильно.
tail -F или tail --follow = имя
IMHO, немного странно менять файл журнала по РАЗМЕРУ, а не по дате. Большинство системных журналов (в unix или linux) меняются еженедельно или ежемесячно, а не в зависимости от размера ... Это то, что мне нравится по разным причинам, а также то, что, если оно будет реализовано, решит вашу проблему.
Восемь лет спустя я не знаю, о чем, черт возьми, я здесь говорил: есть масса мест, где вы хотите чередовать по размеру, потому что ежедневные / еженедельные / ежемесячные ротации могут привести к МАССИВНЫМ файлам, которые могут вызвать серьезные проблемы.
С более опытной точки зрения, реальный вопрос заключается в том, почему вы хотите сидеть и постоянно следить за файлом, который растет так быстро, что вы вращаете его чаще, чем ежедневно ... Это было бы похоже на просмотр потока Matrix.
В наши дни вам было бы лучше изучить некоторую агрегацию журналов больших данных, такую как Splunk или Sumologic, где они могут фильтровать события журнала по классам и запускать их на основе определенных значений журнала ... Нет необходимости вообще смотреть журналы в реальном времени.
Я использую команду на своем производственном сервере:
tail --follow var/log/apache-access_log --retry
Кроме того, он может быть слишком тяжелым для ваших целей, но у splunk есть хвостовая функция, позволяющая делать именно то, что вы хотите. Это бесплатно до 500 МБ в день, но если ваши данные превышают этот размер, это не окупится.