ver puertos puerto poner hat escucha comando abiertos bash shell netcat

bash - puertos - ¿Cómo esperar un puerto abierto con netcat?



ver puertos abiertos red hat (5)

Como se sugiere here , también podría hacer lo siguiente si no tiene una nc instalada, sino bash y coreutils :

#!/bin/bash echo "Waiting jenkins to launch on 8080..." while ! timeout 1 bash -c "echo > /dev/tcp/localhost/8080"; do sleep 1 done echo "Jenkins launched"

Estoy tratando de hacer un archivo docker personalizado con jenkins. Tendría que esperar hasta que el puerto 8080 esté abierto en lugar de hacer un "sueño 60" feo con netcat, pero sin mucha confianza con los scripts bash y netcat.

Aquí hay un ejemplo de lo que estoy tratando de hacer:

#!/bin/bash opened=0 while [ "$opened" == "0" ]; do echo "Waiting jenkins to launch on 8080..." nc -vz localhost 8080 done echo "Jenkins launched"


He encontrado que este es un problema bastante común para escribir una utilidad para esperar a que se abra un puerto, con un tiempo de espera opcional:

# without timeout wait-port localhost:8080 # timeout after a minute wait-port -t 60000 localhost:8080

Es de código abierto y está disponible en github.com/dwmkerr/wait-port . ¡Ojalá otros lo encuentren útil!


No puede configurar netcat para que espere hasta que se abra un puerto, por lo que debe agregar una parte para esperar antes de realizar la siguiente comprobación. Prueba esto:

#!/bin/bash echo "Waiting jenkins to launch on 8080..." while ! nc -z localhost 8080; do sleep 0.1 # wait for 1/10 of the second before check again done echo "Jenkins launched"


Para ampliar la respuesta del usuario987339, aquí le mostramos cómo esperar fácilmente un puerto en su terminal:

función de espera

Agregue esta función a su archivo ~ / .bashrc:

waitport() { while ! nc -z localhost $1 ; do sleep 1 ; done }

Cierre la sesión y vuelva a cargarla para cargar ~ / .bashrc. Entonces:

$ waitport 3000 Connection to localhost port 3000 [tcp/hbci] succeeded!

Esto ha sido validado en macOS. Puede que no funcione en Fedora / CentOS, ya que carecen de la opción -z para netcat .


Sugiero los siguientes revestimientos:

## netcat version: timeout 22 sh -c ''until nc -z $0 $1; do sleep 1; done'' .com 443 ## pure bash version: timeout 22 bash -c ''until printf "" 2>>/dev/null >>/dev/tcp/$0/$1; do sleep 1; done'' .com 443

Ambos comandos salen tan pronto como se establece la conexión, probando cada segundo durante hasta 22 segundos.

Tenga en cuenta que gracias al comando de timeout de timeout código de salida es 0 cuando se puede acceder al puerto, de lo contrario 124 (si no se establece ninguna conexión dentro de un tiempo determinado).