Ошибка TCPServer: адрес уже используется - bind (2)

90

Несколько недель назад 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 :<port number>плюс то же самое происходит на другом ящике
вездесущий
Что произойдет, если вы укажете альтернативный порт?
Марк Томас
к сожалению, тоже самое. Как лучше всего полностью удалить jekyll и переустановить его.
Вездесущий
Если вы использовали Ruby gem для установки, вы сможете удалить его с помощью gem uninstall jekyll. Если вы этого не сделали, возможно, вы установили gem, чтобы перезаписать существующую версию. Вы пытались подключиться к порту с помощью браузера или Telnet, чтобы узнать, может ли это помочь?
Алан В. Смит

Ответы:

224

Введите это в свой терминал, чтобы узнать PID процесса, использующего порт 3000:

$ lsof -wni tcp:3000

Затем используйте число в столбце PID, чтобы остановить процесс:

$ kill -9 PID
Naoise Golden
источник
19
Для всех, кто читает это, убедитесь, что в последней команде вы подставляете PIDфактическое число, которое видите под PID. например, я побежалkill -9 11734
JGallardo
Обратите внимание, что проблема также может быть безобидным предупреждением, исходящим из проблемы конфигурации IPv6: сервер сначала привязывается к адресу IPv4 + IPv6 с двойным стеком, а затем он также пытается выполнить привязку к адресу только IPv6; и последний не работает, потому что адрес IPv6 уже занят предыдущим сокетом с двойным стеком.
jpetazzo
17

Я не имел права оставлять комментарии. Итак, я добавил новый ответ.

Я столкнулся с этой проблемой в Mac OS X 10.10.3. И я никогда раньше не устанавливал и не использовал Jekyll. Мне не удалось запустить сервер jekyll с его номером порта по умолчанию 4000. Причина заключалась в том, что порт был таким же, как и используемый 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

не будет работать, потому что процесс nxd в NoMachine будет продолжать перезапускаться с новым PID.

Поэтому мне пришлось либо:

  • Поменял порт моего сервера jekyll на сайте _config.ymlна другой резервный . Я добавил строку ниже, _config.ymlи это сработало.

    port: 3000 # change server port to 3000

или

  • Изменен порт nxd по умолчанию для NoMachine или удален NoMachine
Фонзи
источник
Спасибо, я не мог понять, что такое терабаза, пока не наткнулся на этот ответ.
Highway of Life
10

Ctrl-Zне завершает программу, а приостанавливает ее и отправляет в фоновый режим. Вы можете возобновить программу с помощью команды «fg». Чтобы на самом деле прекратить его, используйте Ctrl-C.

Фактическое сообщение об ошибке кажется поддельным, и его можно игнорировать. Я получаю то же сообщение об ошибке «используется адрес», но jekyll все равно работает нормально на ожидаемом порту.

Кевин
источник
Я также получаю сообщение об ошибке, но могу отключить свой сайт: 4000
joshuahornby10
3

Я недавно столкнулся с этой проблемой.

Я испробовал все методы, упомянутые выше, и даже перезагрузил компьютер, но все равно не смог !!! Затем я удалил jekyll и установил новую версию, все заработало.

gem uninstall jekyll & gem install jekyll (возможно, вам нужны привилегии суперпользователя).

Если вас действительно раздражают подобные ошибки, стоит попробовать этот метод sb ...

wfwei
источник
1

мы можем использовать команду fuser

fuser -k 3000/tcp

Авинаш Кумар Сингх
источник
0

Убедитесь, что у вас не открыт другой терминал, на котором уже запущен сервер. Если это так, нажмите CTRL-C, чтобы выключить сервер, и это освободит порт / адрес.

Харви
источник
0

Сначала вам нужно найти PID процесса, использующего порт 3000:

 $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
Манодж Датт
источник
-1

работать вокруг

в /_siteработе:python -m SimpleHTTPServer 8080

Арвинд
источник