Estoy ejecutando mi script de shell a continuación en una máquina en la que se ejecuta el servidor de aplicaciones c ++ en el puerto 8080 y en el script de shell estoy ejecutando una URL y almacena la respuesta proveniente de esa URL en la variable DATA.
Pero suponga que si el mismo servidor de aplicaciones está inactivo, no podrá ejecutar la URL y luego se imprimirá Retrying Again
y dormirá durante 30 segundos y luego ejecutará la misma URL nuevamente.
#!/bin/bash
HOSTNAME=$hostname
DATA=""
RETRY=15
echo $HOSTNAME
while [ $RETRY -gt 0 ]
do
DATA=$(wget -O - -q -t 1 http://$HOSTNAME:8080/beat)
if [ $? -eq 0 ]
then
break
else
echo "Retrying Again" >&2
# restart the server
let RETRY-=1
sleep 30
fi
done
echo "Server is UP"
Y aquí HOSTNAME
está el nombre de host local del servidor en el que estoy ejecutando mi script de shell anterior.
Planteamiento del problema:-
Ahora lo que estoy tratando de hacer es, si el servidor está inactivo, se imprimirá, Retrying Again
así que después de eso quiero verificar si el puerto 8080
está abierto $HOSTNAME
o no. Si no, significa que el servidor está inactivo, por lo que quiero reiniciar el servidor ejecutando este comando y luego dormir durante 30 segundos como se muestra arriba en el script de shell.
/opt/app/test/start_stop.sh start
¿Es esto posible hacer aquí en mi script de shell anterior?
Estoy ejecutando este script de shell en Ubuntu 12.04.
fuente
lsof -i :8080 -sTCP:LISTEN
y no obtengo nada en la consola, pero si lo intentonetstat -tulpn | grep :8080
, obtengo mi proceso que se ejecuta en el puerto 8080 ¿por qué es así?netstat -tulpn | grep :8080
?david@machineA:/home/david$ netstat -tulpn | grep :8080 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 27530/test_server
lsof -iTCP -sTCP:LISTEN | grep 8080
?La manera más simple en bash. Prueba si tu puerto está abierto.
Reemplace el eco con lo que quiere.
O puedes usar nc.
Devoluciones:
fuente
nc
es una gran solución para mi caso de uso; gracias por sugerirElaborar sobre la respuesta de RJ, que notas
nc
también es útil ... No solo esnc
útil para consultas rápidas en la línea de comandospero se puede usar sin -v si lo de legibilidad humana no es lo que está buscando, por ejemplo, para usar en un script (el código de salida indicará si el puerto está abierto o cerrado).
fuente