Tengo un proceso ejecutándose siempre con un archivo de registro que puede alcanzar hasta 5 giga, en algún momento tengo que tomar una porción de este registro según el intervalo de tiempo (normalmente uso dd). ¿Existe algún comando en Linux para tomar la porción del registro según el intervalo de tiempo?
PD: no hay marca de tiempo en la mayoría de las líneas de este registro.
Respuesta1
Si no hay un comando que le permita hacerlo (como lo sugiere Wiese), ¿por qué no crea un índice externo de su archivo?
Solo la idea: puedes hacer un script que se ejecute para siempre (o casi ver las notas a continuación) y proporcionar los intervalos de tiempo para crear el índice.
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
Después, puede hacer otro script que, dada la fecha/hora de inicio/finalización, le responda con los tamaños de inicio/finalización. A partir de esos números puedes cortar tu archivo.
Dijiste que es un archivo enorme. Así que no te sugiero que hagas conLínea de númerosy tal vez head MyFile.log -n xxx | tail -n yyy
. Será largo. Es mejor trabajar con el tamaño.
Notas:
- Si se trata de un registro con una salida formateada (incluso si usted la desconoce), siempre es posible que exista alguna herramienta de análisis de la empresa desarrolladora/programadora. Es posible que salga a la luz incluso después de años. En mi humilde opinión, es mejor no tocar ese formato y crear un archivo separado.
- Escriba en su parámetro de script como el PID actual (en caso de que necesite eliminar manualmente), el nombre del archivo (objeto del registro), si conoce el PID del programa que genera el registro...
- El ciclo puede ser eterno o terminar si tienes una condición como: el PID del programa que genera el log ya no existe, el archivo ya no existe, el tamaño real es menor que el anterior (se mueve el archivo o reiniciar el registro (necesita reiniciar la indexación).
- Si mantienes en memoria el $LastSize puedes decidir evitar imprimir líneas en el "log del log" cuando no sea necesario, o detenerlo después de un largo tiempo sin actividad (o modificar dinámicamente el intervalo de tiempo...)