La supervisión de varios archivos con la cola de Unix puede no funcionar como usted espera
por Allen Fung, Senior Software Engineer
"tail-F" es comúnmente usado para monitorear archivos para actualizaciones.
Así es como se puede usar tail para monitorear varios archivos a la vez.
$ tail-F archivo1 archivo2
El problema con el comando anterior es que el texto escrito a archivo1 y archivo2 puede no ser vaciado al disco en nuevos límites de línea. Como resultado, el texto de un archivo podría ser empalmado en texto del otro archivo en la salida de tail.
Este es un ejemplo del problema. Suponga que lo siguiente se escribe en archivo1.
line_1
line_2
line_3
Además, suponga que lo siguiente se escribe en archivo2.
LINE_A
LINE_B
LINE_C
Si el texto no se vuelca en los límites de línea nuevos, será posible obtener la siguiente salida de tail.
lineLINE_A
_1
LINE_B
line_2
LINE_C
line_3
Como se puede ver, "LINE_A" se empalma en "line_1", lo que resulta en "lineLINE_A" en la primera línea. Aquí hay algunas maneras de resolver el problema anterior.
Ejecutar múltiples colas en paralelo y canalizar la salida de cada cola a grep. Necesitará usar la opción en grep para imprimir sólo en nuevos límites de línea.
Escribe una cola nueva que sólo se imprime cuando recibe una línea completa de un archivo.
Modifique la aplicación que generó los archivos de registro para crear sólo un único archivo de registro. Deberá asegurarse de que el texto se vuelca al archivo único en los límites de línea nuevos.
Aquí está el código para implementar (1) arriba.
$ VI multi-tail.sh
#!/bin/sh
# Cuando esto salga, salga de todo el proceso de fondo también.
SALIR de la trampa ' matar $ (Jobs-p) '
# Iterar a través de cada uno de los nombres de archivo dados
para archivo en "$ @"
Hacer
Archivo de la cola en el fondo.
cola-F $File | grep-línea-buffered "" &
Hecho
espera. hasta CTRL + C
Esperar
Dejaré que el lector implemente (2) y (3).
¡ Gracias por leer!