TCPServer错误:地址已在使用中-bind(2)


90

几周前,杰基尔对我来说还算不错,但是突然之间,它给了我以下错误:

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

 % lsof -i :4000
 <fetches nothing>

即使端口上没有任何运行。以下是详细信息:

 % 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 

这是输出

 % 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

我知道该地址未使用,jekyll可能由于其他原因而中断,但抛出该错误。我有什么选择?我也尝试过重新安装。


您如何确切知道该地址未被使用?
塞尔吉奥·图伦采夫

我正在尝试,lsof -i :<port number>再加上同一件事在不同的盒子上发生
Omnipresent

如果指定备用端口会怎样?
马克·托马斯

不幸的是,同一件事。完全删除jekyll并重新安装的最佳方法是什么?
Omnipresent '04

如果您使用Ruby gem进行安装,则应该可以使用进行卸载gem uninstall jekyll。如果您可能没有安装gem来覆盖现有版本。您是否尝试用浏览器或telnet命中该端口以查看是否有帮助?
艾伦·史密斯

Answers:


224

在您的终端中键入以下内容,以查找使用3000端口的进程的PID:

$ lsof -wni tcp:3000

然后,使用“ PID”列中的数字终止进程:

$ kill -9 PID

19
对于阅读此内容的任何人,请确保在最后一个命令中,PID用在PID下看到的实际数字代替。例如,我跑步kill -9 11734
JGallardo 2013年

请注意,该问题也可能是来自IPv6配置问题的无害警告:服务器首先绑定到双栈IPv4 + IPv6地址,然后还尝试绑定到仅IPv6地址;后者不起作用,因为先前的双堆栈套接字已经使用了IPv6地址。
jpetazzo 2014年

17

我没有资格发表评论。因此,我添加了一个新答案。

我在Mac OS X 10.10.3上遇到了此问题。我以前从未安装/使用过Jekyll。我无法使用默认端口号4000启动jekyll服务器。原因是该端口与NoMachine使用的端口相同。用

$ sudo lsof -wni tcp:4000

注意:不运行此命令sudo将没有输出。

我看到了以下输出:

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)

端口4000被占用nxd,这是NoMachine启动的过程。和

$ sudo kill -9 449

将无法正常工作,因为NoMachine的nxd进程将使用新的PID继续重启。

因此,我必须:

  • 将站点中的jekyll服务器端口更改_config.yml为另一个备用端口。我在下面添加了一行_config.yml,它起作用了。

    port: 3000 # change server port to 3000

要么

  • 更改了NoMachine的默认nxd端口,或卸载了NoMachine

谢谢,直到我偶然发现了这个答案,我才知道是什么terabase。
生命之路

10

Ctrl-Z不会终止程序,而是暂停程序并将其发送到后台。您可以使用“ fg”命令恢复该程序。要实际终止它,请使用Ctrl-C

实际的错误消息似乎是虚假的,可以忽略。我收到相同的错误消息“使用中的地址”,但是jekyll在预期的端口上仍然可以正常工作。


我也收到错误消息,但是我可以关闭网站:4000
joshuahornby10 2012年

3

我最近遇到了这个问题。

我尝试了上述所有方法,甚至重新启动了计算机,但仍然无法解决!!!然后我删除了jekyll并安装了一个新版本,它可以正常工作。

gem uninstall jekyll & gem install jekyll (也许您需要超级用户权限)。

如果您真的因类似的错误而烦恼,则此sb方法值得一试...



0

检查您没有正在运行服务器的其他终端打开。如果是这种情况,请执行CTRL-C关闭服务器,这将释放端口/地址。


0

首先,您需要找到使用3000端口的进程的PID:

 $ps -ef

像这样的输出:

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

在这里您可以看到:

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

本地主机:3000有 pid: 6078

杀死那个过程

$sudo kill 6078  

然后跑

$rails s

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.