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.

Wszechobecny
źródło
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
Naoise Golden
źródło
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
Fonzie
źródło
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.

kevin
źródło
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ę ...

wfwei
źródło
1

możemy polecenie użytkownika fuser

fuser -k 3000/tcp

Avinash Kumar Singh
źródło
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.

Harvey
źródło
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
Manoj Datt
źródło
-1

obejść

w /_sitebiegu:python -m SimpleHTTPServer 8080

Arvind
źródło