【问题标题】:TCPServer Error: Address already in use - bind(2)TCPServer 错误:地址已在使用中 - 绑定 (2)
【发布时间】:2012-05-02 22:32:21
【问题描述】:

几周前 Jekyll 对我来说工作正常,但现在突然出现以下错误:

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 :&lt;port number&gt; 加上同样的事情发生在不同的盒子上
  • 如果指定备用端口会怎样?
  • 不幸的是,同样的事情。完全删除 jekyll 并重新安装它的最佳方法是什么。
  • 如果您使用 Ruby gem 安装,您应该可以使用gem uninstall jekyll 卸载。如果您没有安装 gem 来覆盖现有版本。您是否尝试使用浏览器或 telnet 访问端口以查看是否有帮助?

标签: ruby jekyll


【解决方案1】:

在你的终端中输入这个来找出正在使用 3000 端口的进程的 PID:

$ lsof -wni tcp:3000

然后,使用PID列中的数字杀死进程:

$ kill -9 PID

【讨论】:

  • 对于阅读本文的任何人,请确保在最后一个命令中,将PID 替换为您在 PID 下看到的实际数字。例如,我跑了kill -9 11734
  • 请注意,该问题也可能是来自 IPv6 配置问题的无害警告:服务器首先绑定到双栈 IPv4+IPv6 地址,然后它还尝试绑定到仅 IPv6地址;而后者不起作用,因为 IPv6 地址已经被之前的双栈套接字占用了。
【解决方案2】:

我没有资格发表评论。所以我添加了一个新答案。

我在 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。

因此,我不得不:

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

    port: 3000 # change server port to 3000

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

【讨论】:

  • 谢谢,直到我偶然发现了这个答案,我才弄清楚 terabase 是什么。
【解决方案3】:

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

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

【讨论】:

  • 我也收到错误消息,但我可以关闭我的网站:4000
【解决方案4】:

我最近遇到了这个问题。

上面的方法我都试过了,还重启了电脑,还是解决不了!!!然后我删除了 jekyll 并安装了一个新版本,它就可以工作了。

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

如果你真的对类似的bug感到恼火,这个sb方法值得一试……

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      首先你需要找到正在使用 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]   
      

      localhost:3000 有pid: 6078

      杀死那个进程

      $sudo kill 6078  
      

      然后运行

      $rails s
      

      【讨论】:

        【解决方案7】:

        我们可以使用 fuser 命令

        fuser -k 3000/tcp

        【讨论】:

          【解决方案8】:

          解决方法

          /_site 中运行:python -m SimpleHTTPServer 8080

          【讨论】:

            猜你喜欢
            • 2011-01-09
            • 2016-10-24
            • 2020-10-06
            • 1970-01-01
            • 2018-03-20
            • 1970-01-01
            相关资源
            最近更新 更多