Błąd TCPServer: adres już używany - bind (2)


90

Jekyll działał dobrze u mnie kilka tygodni temu, ale teraz nagle pojawia się następujący błąd:

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

 % lsof -i :4000
 <fetches nothing>

Mimo że nic nie działa w porcie. Poniżej szczegóły:

 % 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 

Oto wynik

 % 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

Wiem, że adres nie jest używany, a jekyll prawdopodobnie psuje się z innego powodu, ale generuje ten błąd. Jakie mam możliwości? Próbowałem również zainstalować ponownie.


Skąd dokładnie wiesz, że adres nie jest używany?
Sergio Tulentsev

próbuję lsof -i :<port number>plus to samo dzieje się na innym pudełku
Omnipresent

Co się stanie, jeśli określisz alternatywny port?
Mark Thomas,

niestety to samo. Jaki jest najlepszy sposób, aby całkowicie usunąć jekyll i zainstalować go ponownie.
Wszechobecny

Jeśli do instalacji użyłeś Ruby gem, powinieneś być w stanie odinstalować za pomocą gem uninstall jekyll. Jeśli nie zainstalowałeś z gemem, aby nadpisać istniejącą wersję. Czy próbowałeś wejść do portu za pomocą przeglądarki lub telnetu, aby sprawdzić, czy to pomoże?
Alan W. Smith

Odpowiedzi:


224

Wpisz to w terminalu, aby znaleźć PID procesu, który korzysta z portu 3000:

$ lsof -wni tcp:3000

Następnie użyj liczby w kolumnie PID, aby zakończyć proces:

$ kill -9 PID

19
Każdemu, kto to czyta, upewnij się, że w ostatnim poleceniu podstawisz PIDrzeczywisty numer, który widzisz pod PID. na przykład pobiegłemkill -9 11734
JGallardo

Zauważ, że problem może być również nieszkodliwym ostrzeżeniem pochodzącym z problemu z konfiguracją IPv6: serwer najpierw wiąże się z adresem IPv4 + IPv6 z dwoma stosami, a następnie próbuje również połączyć się z adresem tylko dla IPv6; a to drugie nie działa, ponieważ adres IPv6 jest już zajęty przez poprzednie gniazdo z dwoma stosami.
jpetazzo,

17

Nie kwalifikowałem się do komentowania. Więc dodałem nową odpowiedź.

Napotkałem ten problem w systemie Mac OS X 10.10.3. I nigdy wcześniej nie instalowałem / nie używałem Jekyll. Nie udało mi się uruchomić serwera jekyll z jego domyślnym numerem portu 4000. Powodem było to, że port był taki sam, jak używany w NoMachine. Z

$ sudo lsof -wni tcp:4000

Uwaga: uruchomienie tego polecenia bez nie sudospowoduje żadnego wyniku.

Widziałem to wyjście:

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)

Port 4000 był zajęty nxd , co zostało uruchomione przez NoMachine. I

$ sudo kill -9 449

nie zadziała, ponieważ proces nxd NoMachine będzie się restartował z nowym PID.

Dlatego musiałem albo:

  • Zmieniłem port serwera Jekyll w witrynie _config.ymlna inny oszczędzony. Dołączyłem poniższy wiersz do _config.ymli zadziałało.

    port: 3000 # change server port to 3000

lub

  • Zmieniono domyślny port nxd NoMachine lub Odinstaluj NoMachine

Dzięki, nie mogłem dowiedzieć się, czym jest baza danych, dopóki nie natknąłem się na tę odpowiedź.
Highway of Life

10

Ctrl-Znie kończy programu, ale raczej zawiesza go i wysyła w tle. Możesz wznowić działanie programu komendą „fg”. Aby faktycznie go zakończyć, użyjCtrl-C .

Rzeczywisty komunikat o błędzie wydaje się fałszywy i można go zignorować. Otrzymuję ten sam komunikat o błędzie „adres w użyciu”, ale jekyll i tak działa dobrze na oczekiwanym porcie.


Otrzymuję również komunikat o błędzie, ale mogę wyłączyć witrynę: 4000
joshuahornby 10

3

Niedawno spotkałem się z tym problemem.

Wypróbowałem wszystkie wymienione powyżej metody, a nawet zrestartowałem komputer, ale nadal nie mogłem go rozwiązać !!! Następnie usunąłem jekyll i zainstalowałem nową wersję, po prostu działało.

gem uninstall jekyll & gem install jekyll (być może potrzebujesz uprawnień superużytkownika).

Jeśli naprawdę denerwują Cię podobne błędy, warto wypróbować tę metodę ...



0

Sprawdź, czy nie masz otwartego innego terminala, na którym już działa serwer. W takim przypadku wykonaj CTRL-C, aby zamknąć serwer, a to zwolni port / adres.


0

Najpierw musisz znaleźć PID procesu, który używa portu 3000:

 $ps -ef

Wyjście w ten sposób:

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

tutaj możesz zobaczyć :

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

localhost: 3000 ma pid: 6078

zabić ten proces przez

$sudo kill 6078  

następnie uruchomić

$rails s

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.