Linux/Unix Shell Scripting - Script de búsqueda en varios servidores

 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado su posición en 21 puestos en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Script de búsqueda en varios servidores

Publicado por nov_85 (3 intervenciones) el 30/04/2021 11:59:09
Buenos días,

Necesito crear un script que me permita realizar una búsqueda en varios servidores pero con el siguiente proceso:
1- Se pedirá introducir tres variables para la búsqueda: fecha (que puede añadirse como aammdd/aammd/aamm/aam/aa, rango de horas a buscar y cadena/palabra que queremos buscar. (Ej: fecha: 210430, de 13 a 14 h, ERROR)
2- Se hará una búsqueda en dos servidores distintos por ssh de los archivos en cuyo nombre tenga la fecha introducida y que en su contenido tenga algún registro dentro del rango de horas (cada registro en estos archivos empiezan con el formato aaaa-mm-aa hh:mm:ss,msmsms pero puede tener varias lineas un mismo registro). Estos archivos estarán en un directorio concreto y será la misma ruta en ambos servidores. El resultado se guardará en un txt por cada servidor. (Ej: el txt contendrá los archivos donde se ha registrado toda la actividad entre las 13 y las 14 horas del 30/04/2021)
3- Se realizará una búsqueda de la cadena/palabra que hemos introducido en los archivos de la búsqueda anterior en el servidor correspondiente.
4- Se generará otro txt con los resultados de la búsqueda por servidor y se mostrará en pantalla el número total de registros encontrados en cada servidor.

He intentado mil maneras pero no soy capaz de quitar toda esta información de manera sencilla ¿alguien puede ayudarme?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 13
Ha disminuido 1 puesto en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Script de búsqueda en varios servidores

Publicado por José Luis (5 intervenciones) el 01/05/2021 13:01:06
Hola,

Pon lo que has realizado para orientarte.

No se si te atoras en definir las variables, en conectarte a los servidores, en limpiar el archivo, en fin.

Pon tu avance y en lo que no entiendas te podré si está al alcance de mi conocimiento o algún colega te puede orientar.

Saludos
José Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 5
Ha aumentado su posición en 21 puestos en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Script de búsqueda en varios servidores

Publicado por nov_85 (3 intervenciones) el 07/06/2021 15:46:47
Buenas tardes,

El mayor problema que tengo es en hacer la conexión y búsqueda en otros servidores guardando los resultados en un archivo de texto y mostrando el numero total de registros encontrados (siempre me da error o no me lo hace bien):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/bin/bash
# Buscador por día
 
echo "Script para buscar por día"
echo
 
#ENTRADA DE DATOS
 
echo "Introducir fecha en formato yymmdd o parte de la misma:"
# Se lee la fecha del teclado y se guarda en la variable fecha
read fecha
echo
 
echo "Introducir valor a buscar:"
# Se lee el array del teclado y se guarda en la variable buscar_valor
read buscar_valor
echo
 
echo "Introducir tipo en minusculas:"
# Se lee y se guarda en la variable tipo_m
read tipo_m
 
 
#Ruta y nombre del archivo donde se buscará (ej.Archivo_DE_PRUEBA_array_20210607.txt o Archivo_DE_PRUEBA_numeros_20210607)
ruta=/carpeta1/carpeta2/carpeta3/
nombre_archivo="Archivo_DE_PRUEBA_"
nombre_archivo="$nombre_archivo${tipo_m}_"
nombre_archivo="$nombre_archivo$fecha"
usuario=$(whoami)
 
echo
echo "Se hará la búsqueda en el archivo que comience por ${nombre_archivo}"
echo
 
# Si el archivo de ficheros o resultados existe, borrarlo primero
if [ -f /home/$usuario/bin/bash/resultados.txt ]; then
    rm /home/$usuario/bin/bash/resultados.txt
fi
 
if [ -f /home/$usuario/bin/bash/ficheros.txt ]; then
    rm /home/$usuario/bin/bash/ficheros.txt
fi
 
nodo=1
 
if [$nodo -eq 1]; then
	echo "Se realizará la búsqueda en nodo1"
	ssh  -t $usuario@nodo1
	#Listamos los archivos con esa fecha
	find $ruta -name "${nombre_archivo}*" > ficheros.txt
	#Contamos en los logs de la fecha indicada el valor
	find $ruta -name "${nombre_archivo}*" -exec zgrep "$buscar_valor" {} \; > resultados.txt
	RESULTADO1=$(find $ruta -name "${nombre_archivo}*" -exec zgrep -c "$buscar_valor" {} \;)
	arr=( $RESULTADO1 );echo "$((${arr[@]/%/+}0))"
	nodo=$nodo+1
 
elif [$nodo -eq 2];then
	echo "Se realizará la búsqueda en nodo2
	ssh  -t $usuario@nodo2
	#Listamos los archivos con esa fecha
	find $ruta -name "${nombre_archivo}*" > ficheros.txt
	#Contamos en los logs de la fecha indicada el valor
	find $ruta -name "${nombre_archivo}*" -exec zgrep "$buscar_valor" {} \; > resultados.txt
	RESULTADO2=$(find $ruta -name "${nombre_archivo}*" -exec zgrep -c "$buscar_valor" {} \;)
	arr=( $RESULTADO2 );echo "$((${arr[@]/%/+}0))"
	nodo=$nodo+1
	else exit
fi
RESULTADO=$RESULTADO1+$RESULTADO2
# Avisar al usuario que se ha terminado de ejecutar el script
echo ---------Fin del script.-------------


Muchas gracias por la ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 5
Ha aumentado su posición en 21 puestos en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Script de búsqueda en varios servidores

Publicado por nov_85 (3 intervenciones) el 03/11/2021 10:57:58
Buenos días,

Sigo sin poder sacarlo ¿alguien me puede ayudar?

Gracias y un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script de búsqueda en varios servidores

Publicado por Tom (361 intervenciones) el 03/11/2021 11:08:44
Trata de describir mejor tu problema, el proceso no es simple ni sencillo de probar para quien lo revise.
Por cierto, en la línea 58 de lo que has pegado debes cerrar las comillas del echo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Script de búsqueda en varios servidores

Publicado por Juan Alberto (2 intervenciones) el 03/11/2021 11:09:55
Buenas,

Si el problema es para conectarte con los servidores prueba con el echo ssh [email protected]

Si consigues conectarte es un avance antes de ejecutar cualquier orden sobre los servidores.

Ve contándome, me parece muy interesante.

https://clientes.hoswedaje.com/aff.php?aff=64
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Script de búsqueda en varios servidores

Publicado por Tom (361 intervenciones) el 03/11/2021 11:35:59
De momento, te recomendaría que siguieras con algo como esto, aunque no queda nada claro el uso que le quieres dar a los archivos ficheros.txt y resultados.txt ... De entrada lo que estás tratando de hacer no es lo que dices en el enunciado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/bash
# Buscador por día
 
echo "Script para buscar por día\n"
 
#ENTRADA DE DATOS
# Se lee la fecha del teclado y se guarda en la variable fecha
echo "Introducir fecha en formato yymmdd o parte de la misma:"
read fecha
# Se lee el array del teclado y se guarda en la variable buscar_valor
echo "\nIntroducir valor a buscar:"
read buscar_valor
 
# Se lee y se guarda en la variable tipo_m
echo "\nIntroducir tipo en minusculas:"
read tipo_m
 
#Ruta y nombre del archivo donde se buscará (ej.Archivo_DE_PRUEBA_array_20210607.txt o Archivo_DE_PRUEBA_numeros_20210607)
ruta=/carpeta1/carpeta2/carpeta3/
nombre_archivo="Archivo_DE_PRUEBA_"
nombre_archivo="${nombre_archivo}${tipo_m}_${fecha}"
 
usuario=$(whoami)
 
echo "\nSe hará la búsqueda en el archivo que comience por ${nombre_archivo}\n"
 
# Si el archivo de ficheros o resultados existe, borrarlo primero
rm -f /home/$usuario/bin/bash/resultados.txt
rm -f /home/$usuario/bin/bash/ficheros.txt
 
# Reemplazar nodo1 y nodo2 por los alias definidos en /etc/hosts
for NODO in nodo1 nodo2
do
	echo "Se realizará la búsqueda en $NODO"
 
	ssh -t $usuario@$NODO "find $ruta -name \"${nombre_archivo}*\"" > ficheros.txt
	ssh -t $usuario@$NODO "find $ruta -name \"${nombre_archivo}*\" -exec zgrep \"$buscar_valor\" {} \;" > resultados.txt
 
	RESULTADO1=$(find $ruta -name "${nombre_archivo}*" -exec zgrep -c "$buscar_valor" {} \;)
	arr=( $RESULTADO1 )
	echo "$((${arr[@]/%/+}0))"
done
 
RESULTADO=$(( RESULTADO1 + RESULTADO2 ))
 
# Avisar al usuario que se ha terminado de ejecutar el script
 
echo ---------Fin del script.-------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Script de búsqueda en varios servidores

Publicado por Juan Alberto (2 intervenciones) el 03/11/2021 13:10:59
De hecho, le diría de reestructurarlo todo utilizando expect.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar