Помилка TCPServer: Адреса вже використовується - прив'язка (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>плюс те саме відбувається на іншій коробці
Вездесущий

Що станеться, якщо ви вкажете альтернативний порт?
Марк Томас

на жаль, те саме. Який найкращий спосіб повністю видалити джекіл і перевстановити його.
Вездесущий

Якщо ви використовували Ruby gem для встановлення, ви зможете видалити за допомогою gem uninstall jekyll. Якщо ви, можливо, не встановили за допомогою gem, щоб замінити існуючу версію. Спробували зачепити порт за допомогою браузера або telnet, щоб перевірити, чи надає це допомогу?
Alan W. Smith

Відповіді:


224

Введіть це у своєму терміналі, щоб дізнатися PID процесу, який використовує порт 3000:

$ lsof -wni tcp:3000

Потім використовуйте номер у стовпці PID, щоб перебити процес:

$ kill -9 PID

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

не буде працювати, оскільки процес nMD NoMachine продовжуватиме перезавантажуватися з новим PID.

Тому мені довелося:

  • Змінив мій серверний порт jekyll на сайті _config.ymlна інший, запасний. Я додав рядок нижче, _config.ymlі це спрацювало.

    port: 3000 # change server port to 3000

або

  • Змінено порт NXD за замовчуванням NoMachine або Видалити NoMachine

Дякую, я не міг зрозуміти, що таке терабаза, поки не натрапив на цю відповідь.
Шосе життя

10

Ctrl-Zне припиняє програму, а призупиняє її та відправляє у фоновий режим. Ви можете відновити програму за допомогою команди "fg". Щоб фактично припинити його, використовуйте Ctrl-C.

Фактичне повідомлення про помилку видається помилковим і може бути проігноровано. Я отримую те саме повідомлення про помилку "адреса, що використовується", але jekyll все одно працює нормально на очікуваному порту.


Я також отримую повідомлення про помилку, але я можу запустити свій сайт: 4000
joshuahornby10

3

Я зустрів цю проблему нещодавно.

Я випробував усі методи, згадані вище, і навіть перезавантажив комп’ютер, але все одно не зміг його вирішити !!! Потім я видалив джекіл і встановив нову версію, вона просто спрацювала.

gem uninstall jekyll & gem install jekyll (можливо, вам потрібен суперкористувацький привілей).

Якщо вас справді дратують подібні помилки, цей метод sb варто спробувати ...



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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.