Есть ли способ создать специальные файлы в Linux, которые сохранят только, скажем, 100 последних написанных строк? У меня есть процесс, заполняющий файл журнала, и я хотел бы регулярно анализировать его 100 последних строк.

Я знаю, что мог бы использовать какой-то вид logrotate, но есть ли способ создать специальный файл, который будет заполняться, пока он не достигнет 100 строк, а затем, добавив строку, удалит самую старую, так что файл будет содержать только 100 строк? (вид линейного FIFO)

большое спасибо

3 ответа3

0

Разрабатывая метод Jarmunds, вы можете создать скрипт bash, например:

while true; do 
    tail -n 100 somefile.log > onlylast100lines.log
    sleep 5
done

это будет анализировать последние 100 строк somefile.log в onlylast100lines.log каждые 5 секунд. Файл будет перезаписываться каждый раз, поэтому всегда будут только последние 100 строк. Это может быть добавлено в ваш скрипт входа в систему или на любой уровень запуска, который вы хотите, чтобы это выполнялось.

0

Журналы представляют собой текстовые (подобные) файлы и, будучи такими, добавление к ним новых дисковых блоков, когда это требуется новыми строками, является быстрым действием, хорошо поддерживаемым любой файловой системой.

Однако постоянное удаление первой строки при появлении нового означало бы постоянную реорганизацию по крайней мере некоторых, если не всех блоков файла. Это означало бы большие накладные расходы, связанные с ведением журнала, в то время как одной из наиболее важных характеристик, которые мы хотим от ведения журнала, является его легкость.

Файловые системы не подготовлены для этого (по крайней мере, я не слышал об этом типе), поэтому журналирование logrotate/tail/database-backed используется там, где важны последние записи.

0

Предполагая, что у вас есть скрипт, который обрабатывает только последние 100 строк каждый раз, когда он запускается, эти строки лучше всего захватывать с помощью команды tail , поскольку она в значительной степени выполняет то, что вы хотите сделать. Ключ здесь - ключ -n который определяет, сколько строк он должен захватывать, начиная с конца.

Вы можете напрямую включить tail -n 100 somefile.log в свой скрипт или периодически запускать tail -n 100 somefile.log > onlylast100lines.log чтобы создать файл только с последними 100 строками. Последний подход будет перезаписывать целевой файл каждый раз, поэтому нет необходимости удалять его между каждым запуском.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .