uso sirve que para otro mostrar lineas copiar contar comando cantidad archivo bash file tail

bash - sirve - tail y head



¿Cómo puedo usar la utilidad tail para ver un archivo de registro que se recrea con frecuencia? (4)

¡Sí! Use esto (el reintento hará que el reintento se vuelva a intentar cuando el archivo no exista o sea inaccesible en lugar de solo fallar, como cuando se cambian los archivos):

tail -f --retry <filename>

O

tail --follow=name --retry

O

tail -F <filename>

Necesito una solución para crear una secuencia de comandos para seguir un archivo de registro que se vuelve a crear (con el mismo nombre) después de que alcance un tamaño determinado.

El uso de " tail -f " hace que la cola se detenga cuando el archivo se vuelve a crear / girar.

Lo que me gustaría hacer es crear un script que pueda seguir el archivo y, por ejemplo, después de que alcance las 100 líneas, luego reinicie el comando ... ¿O incluso mejor reiniciar el comando cuando se vuelve a crear el archivo?

¿Es posible?


Como no tiene una cola que admita todas las funciones y porque no tiene vigilancia, puede usar un script simple que se repite indefinidamente para ejecutar la cola.

#!/bin/bash PID=`mktemp` while true; do [ -e "$1" ] && IO=`stat -c %i "$1"` [ -e "$1" ] && echo "restarting tail" && { tail -f "$1" 2> /dev/null & echo $! > $PID; } # as long as the file exists and the inode number did not change while [[ -e "$1" ]] && [[ $IO = `stat -c %i "$1"` ]] do sleep 0.5 done [ ! -z $PID ] && kill `cat $PID` 2> /dev/null && echo > $PID sleep 0.5 done 2> /dev/null rm -rf $PID

Es posible que desee utilizar la captura para salir limpiamente de este script. Esto depende de ti.

Básicamente, esta secuencia de comandos comprueba si el número de inodo (usando stat -c %i "$1" ) cambia para eliminar el comando de tail e inicia uno nuevo cuando se vuelve a crear el archivo.

Nota: puede deshacerse del echo "restarting tail" que contaminará su salida. Sólo fue útil para la prueba. También pueden surgir problemas si el archivo se reemplaza después de que verifiquemos el número de inodo y antes de comenzar el proceso de cola.


Si tail -F no está disponible, y está intentando recuperarse de logrotate , puede agregar la opción copytruncate a su archivo logrotate.d/ spec para que en lugar de crear un nuevo archivo cada vez después de la rotación, el archivo se mantenga y truncado. mientras que una copia se gira hacia fuera.

De esta manera, el identificador de archivo anterior continúa apuntando al nuevo archivo de registro (truncated) donde se agregan los nuevos registros.

Tenga en cuenta que puede haber alguna pérdida de datos durante este proceso de copy-truncate .


intenta correr

watch "tail -f" yourfile.log