Error de TCPServer: la dirección ya está en uso - bind (2)


90

Jekyll me estaba funcionando bien hace unas semanas, pero ahora, de repente, me da el siguiente error:

TCPServer Error: Address already in use - bind(2)
INFO  WEBrick::HTTPServer#start: pid=7300 port=4000

 % lsof -i :4000
 <fetches nothing>

Aunque no se esté ejecutando nada en el puerto. A continuación se muestran los detalles:

 % jekyll --version
Jekyll 0.11.2
 % where jekyll
/home/bhaarat/.rvm/gems/ruby-1.9.2-p290/bin/jekyll
/usr/bin/jekyll
 % ruby --version
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
 % rvm --version
rvm 1.10.0 

Aquí está la salida

 % jekyll --server
Configuration from /home/bhaarat/blog/omnipresent.github.com/_config.yml
Auto-regenerating enabled: /home/bhaarat/blog/omnipresent.github.com -> /home/bhaarat/blog/omnipresent.github.com/_site
[2012-04-21 13:46:40] regeneration: 38 files changed
[2012-04-21 13:46:40] INFO  WEBrick 1.3.1
[2012-04-21 13:46:40] INFO  ruby 1.9.2 (2011-07-09) [i686-linux]
[2012-04-21 13:46:40] WARN  TCPServer Error: Address already in use - bind(2)
[2012-04-21 13:46:40] INFO  WEBrick::HTTPServer#start: pid=7382 port=4000

Sé que la dirección no está en uso y es probable que jekyll se esté rompiendo por alguna otra razón, pero arroja ese error. ¿Cuáles son mis opciones? También intenté reinstalar.


¿Cómo sabe exactamente que la dirección no está en uso?
Sergio Tulentsev

Estoy intentando lsof -i :<port number>más lo mismo sucede en una caja diferente
Omnipresente

¿Qué sucede si especifica un puerto alternativo?
Mark Thomas

lamentablemente, lo mismo. ¿Cuál es la mejor manera de eliminar completamente jekyll y reinstalarlo?
Omnipresente

Si usó Ruby gem para instalar, debería poder desinstalar con gem uninstall jekyll. Si tal vez no lo instaló con gem para sobrescribir la versión existente. ¿Intentaste acceder al puerto con tu navegador o telnet para ver si eso te ayuda?
Alan W. Smith

Respuestas:


224

Escriba esto en su terminal para averiguar el PID del proceso que está usando el puerto 3000:

$ lsof -wni tcp:3000

Luego, use el número en la columna PID para finalizar el proceso:

$ kill -9 PID

19
Para cualquiera que lea esto, asegúrese de que en el último comando, lo sustituya PIDpor el número real que ve debajo del PID. por ejemplo, corríkill -9 11734
JGallardo

Tenga en cuenta que el problema también puede ser una advertencia inofensiva proveniente de un problema de configuración de IPv6: el servidor primero se vincula a una dirección IPv4 + IPv6 de doble pila, luego también intenta vincularse a una dirección solo IPv6; y este último no funciona porque la dirección IPv6 ya está tomada por el socket anterior de doble pila.
jpetazzo

17

No estaba calificado para publicar comentarios. Entonces agregué una nueva respuesta.

Encontré este problema en Mac OS X 10.10.3. Y nunca antes había instalado / usado Jekyll. No pude iniciar el servidor jekyll con su número de puerto predeterminado 4000. La razón era que el puerto era el mismo que usaba NoMachine. Con

$ sudo lsof -wni tcp:4000

Nota: Ejecutar este comando sin sudono tendrá salida.

Vi esta salida:

COMMAND PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
nxd     449   nx    3u  IPv4 0x8d22************      0t0  TCP *:terabase (LISTEN)
nxd     449   nx    4u  IPv6 0x8d22************      0t0  TCP *:terabase (LISTEN)

El puerto 4000 fue ocupado por nxd, que fue el proceso iniciado por NoMachine. Y

$ sudo kill -9 449

no funcionaría, porque el proceso nxd de NoMachine seguiría reiniciándose, con un nuevo PID.

Por lo tanto, tuve que:

  • Cambié el puerto de mi servidor jekyll en el sitio _config.ymla otro libre. Agregué la línea de abajo _config.ymly funcionó.

    port: 3000 # change server port to 3000

o

  • Se cambió el puerto nxd predeterminado de NoMachine o desinstalar NoMachine

Gracias, no pude entender qué era terabase hasta que me topé con esta respuesta.
Highway of Life

10

Ctrl-Zno finaliza un programa, sino que lo suspende y lo envía a un segundo plano. Puede reanudar el programa con el comando "fg". Para terminarlo, use Ctrl-C.

El mensaje de error real parece ser falso y puede ignorarse. Recibo el mismo mensaje de error "dirección en uso", pero jekyll funciona bien de todos modos en el puerto esperado.


También recibo el mensaje de error, pero puedo ejecutar mi sitio desde: 4000
joshuahornby10

3

Me he encontrado con este problema recientemente.

Probé todos los métodos mencionados anteriormente e incluso reinicié mi computadora, ¡pero aún así no pude resolverlo! Luego quité el jekyll e instalé una nueva versión, simplemente funcionó.

gem uninstall jekyll & gem install jekyll (tal vez necesite privilegios de superusuario).

Si realmente te molestan errores similares, vale la pena probar este método sb ...



0

Compruebe que no tiene otra terminal abierta en la que ya esté ejecutando un servidor. Si ese es el caso, haga CTRL-C para apagar el servidor, y eso liberará el puerto / dirección.


0

Primero necesita encontrar el PID del proceso que está usando el puerto 3000:

 $ps -ef

Salida como esta:

1003      4953  2614  0 08:51 pts/0    00:00:00 -bash
1003      5634     1  0 08:56 pts/0    00:00:00 spring server | moviestore | started 2 hours ago                                           
1003      5637  5634  0 08:56 ?        00:00:01 spring app    | moviestore | started 2 hours ago | development mode                                                              
1003      6078  4953  0 09:03 pts/0    00:00:03 puma 3.6.0 (tcp://localhost:3000) [moviestore]              
1003      6117  2614  0 09:03 pts/1    00:00:00 -bash
root      6520     2  0 09:57 ?        00:00:00 [kworker/u8:2]
root      6936  1225  0 11:09 ?        00:00:00 [lightdm] <defunct>
1003      7084     1  0 11:09 ?        00:00:00 /usr/bin/python /usr/share/apport/apport-gtk
1003      7475     1  0 11:10 ?        00:00:00 /usr/bin/python /usr/share/apport/apport-gtk
root      8739  1225  1 11:29 tty8     00:00:11 /usr/bin/X :1 -auth /var/run/lightdm/root/:1 -nolisten tcp vt8 -novtswitch
root      8853  1225  0 11:29 ?        00:00:00 lightdm --session-child 13 22
1002      8943     1  0 11:30 ?        00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --login
1002      8954  8853  0 11:30 ?        00:00:00 gnome-session --session=ubuntu
1002      8992  8954  0 11:30 ?        00:00:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session gnome-session --session=ubuntu
1002      8995     1  0 11:30 ?        00:00:00 /usr/bin/dbus-launch --exit-with-session gnome-session --session=ubuntu
1002      8996     1  0 11:30 ?        00:00:00 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
1002      9007  8954  0 11:30 ?        00:00:00 /usr/lib/gnome-settings-daemon/gnome-settings-daemon
1002      9015     1  0 11:30 ?        00:00:00 /usr/lib/gvfs/gvfsd
1002      9018  8954  1 11:30 ?        00:00:07 compiz
1002      9021     1  0 11:30 ?        00:00:00 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2
1002      9028  8954  0 11:30 ?        00:00:00 /usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1
1002      9029  8954  0 11:30 ?        00:00:01 nautilus -n
1002      9030  8954  0 11:30 ?        00:00:00 /usr/lib/gnome-settings-daemon/gnome-fallback-mount-helper
1002      9031  8954  0 11:30 ?        00:00:00 nm-applet
1002      9032  8954  0 11:30 ?        00:00:02 /opt/mTrac/mTrac
1002      9033  8954  0 11:30 ?        00:00:00 bluetooth-applet
1002      9045  9032  0 11:30 ?        00:00:00 /opt/mTrac/mTrac --type=zygote --no-sandbox
1002      9050     1  0 11:30 ?        00:00:00 /usr/lib/gvfs/gvfs-gdu-volume-monitor
1002      9054     1  0 11:30 ?        00:00:00 /usr/bin/pulseaudio --start --log-target=syslog
1002      9057     1  0 11:30 ?        00:00:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
1002      9062     1  0 11:30 ?        00:00:00 /usr/lib/gvfs/gvfs-afc-volume-monitor

aquí puedes ver :

1003      6078  4953  0 09:03 pts/0    00:00:03 puma 3.6.0 (tcp://localhost:3000) [moviestore]   

localhost: 3000 tienen pid: 6078

matar ese proceso por

$sudo kill 6078  

entonces corre

$rails s

-1

solución alterna

en /_siteejecución:python -m SimpleHTTPServer 8080

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.