TCPServer Error: แอดเดรสถูกใช้แล้ว - ผูก (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 อาจพังด้วยเหตุผลอื่น แต่ทำให้เกิดข้อผิดพลาดนั้น ตัวเลือกของฉันคืออะไร? ฉันได้ลองติดตั้งใหม่แล้วเช่นกัน


คุณทราบได้อย่างไรว่าที่อยู่ไม่ได้ถูกใช้งาน
Sergio Tulentsev

ฉันพยายามlsof -i :<port number>บวกสิ่งเดียวกันที่เกิดขึ้นบนกล่องที่แตกต่างกัน
อยู่ทั่วไปทุกหนทุกแห่ง

จะเกิดอะไรขึ้นหากคุณระบุพอร์ตสำรอง
Mark Thomas

น่าเสียดายที่สิ่งเดียวกัน อะไรคือวิธีที่ดีที่สุดในการลบ jekyll และติดตั้งใหม่
อยู่ทั่วไปทุกหนทุกแห่ง

หากคุณใช้ Ruby gem ในการติดตั้งคุณควรจะสามารถถอนการติดตั้งด้วยgem uninstall jekyll. หากคุณไม่ได้ติดตั้งด้วย gem เพื่อเขียนทับเวอร์ชันที่มีอยู่ คุณลองกดพอร์ตด้วยเบราว์เซอร์หรือเทลเน็ตของคุณเพื่อดูว่าให้ความช่วยเหลือหรือไม่
Alan

คำตอบ:


224

พิมพ์สิ่งนี้ในเทอร์มินัลของคุณเพื่อค้นหา PID ของกระบวนการที่ใช้พอร์ต 3000:

$ lsof -wni tcp:3000

จากนั้นใช้ตัวเลขในคอลัมน์ PID เพื่อฆ่ากระบวนการ:

$ kill -9 PID

19
สำหรับทุกคนที่อ่านสิ่งนี้ตรวจสอบให้แน่ใจว่าในคำสั่งสุดท้ายคุณแทนที่PIDด้วยจำนวนจริงที่คุณเห็นภายใต้ PID ตัวอย่างเช่นฉันวิ่งkill -9 11734
JGallardo

โปรดทราบว่าปัญหาอาจเป็นคำเตือนที่ไม่เป็นอันตรายที่มาจากปัญหาการกำหนดค่า IPv6: เซิร์ฟเวอร์จะผูกกับที่อยู่ IPv4 + IPv6 แบบสแต็กคู่ก่อนจากนั้นจะพยายามผูกกับที่อยู่ IPv6 เท่านั้น และหลังใช้งานไม่ได้เนื่องจากที่อยู่ IPv6 ถูกยึดโดยซ็อกเก็ต dual-stack ก่อนหน้านี้แล้ว
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

11

Ctrl-Zไม่ได้ยุติโปรแกรม แต่เป็นการระงับโปรแกรมและส่งไปที่พื้นหลัง คุณสามารถเริ่มโปรแกรมต่อได้โดยใช้คำสั่ง "fg" Ctrl-Cที่จริงมันยุติการใช้

ข้อความแสดงข้อผิดพลาดที่เกิดขึ้นจริงดูเหมือนจะเป็นของปลอมและสามารถละเว้นได้ ฉันได้รับข้อความแสดงข้อผิดพลาดเดียวกันว่า "address in use" แต่ jekyll ทำงานได้ดีที่พอร์ตที่คาดไว้


ฉันได้รับข้อความแสดงข้อผิดพลาดเช่นกัน แต่ฉันสามารถปิดไซต์ได้: 4000
joshuahornby10

3

ฉันพบปัญหานี้เมื่อไม่นานมานี้

ฉันลองใช้วิธีการทั้งหมดที่กล่าวมาข้างต้นและรีสตาร์ทคอมพิวเตอร์ แต่ก็ยังไม่สามารถแก้ไขได้ !!! จากนั้นฉันก็ลบ jekyll และติดตั้งเวอร์ชันใหม่มันก็ใช้งานได้

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.