У меня есть постоянно работающий процесс с файлом журнала, размер которого может достигать 5 гигабайт. Иногда мне приходится извлекать часть этого журнала на основе определенного интервала времени (обычно я использую dd). Есть ли в Linux команда, позволяющая извлекать часть журнала на основе определенного интервала времени?
PS: в большинстве строк этого журнала нет отметки времени.
решение1
Если нет команды, которая позволяет это сделать (как предлагает Визе), почему бы вам не создать внешний индекс вашего файла?
Идея такова: можно создать скрипт, который будет работать вечно (или почти вечно, см. примечания ниже), и задать временные интервалы для создания индекса.
PIDofThisInstance=$$
# ... you code for the header, checks...
while true ; do
# This is the core of your cycle
sync # Maybe
CurrentSize=`ls -s $MyFile | awk '{print $1} ' `
CurrentTime=`date +"%Y%m%d%H%M%S"`
echo $CurrentTime $CurrentSize >> $Log_Of_My_Log_File
sleep $TimeToSleep
# if (exit-condition)
# then
# break #Exit from the infinite loop.
# fi
done
После этого вы можете сделать другой скрипт, который, учитывая начальную/конечную дату/время, отвечает вам начальными/конечными размерами. Из этих чисел вы можете вырезать свой файл.
Вы сказали, что это огромный файл. Поэтому я не предлагаю вам делать сномера строки может быть head MyFile.log -n xxx | tail -n yyy
. Это будет долго. Лучше работать с размером.
Примечания:
- Если это лог с форматированным выводом (даже если вы его не знаете), всегда возможно, что существует какой-то аналитический инструмент от компании-разработчика/программиста. Возможно, он выйдет даже спустя годы. ИМХО лучше не трогать этот формат и создать отдельный файл.
- Впишите в параметры скрипта текущий PID (на случай, если вам нужно завершить процесс вручную), имя файла (объекта логирования), если вы знаете PID программы, которая генерирует лог...
- Цикл может быть бесконечным или прекратиться, если возникнет такое условие, как: PID программы, которая генерирует журнал, больше не существует, файл больше не существует, фактический размер меньше старого (вы перемещаете файл или перезапускаете журнал, вам необходимо перезапустить индексацию).
- Если вы сохраняете в памяти $LastSize, вы можете решить не печатать строки в «журнале журнала», когда это не нужно, или останавливать после длительного времени бездействия (или динамически изменять временной интервал...)