पहले से ही उपयोग में लिया गया पता - bind (2) (Errno :: EADDRINUSE)


130

मैं प्यूमा वेब सर्वर के साथ रेल एप्लिकेशन को तैनात करने की कोशिश कर रहा हूं। Puma सर्वर को कॉन्‍फ़िगर फ़ाइल से प्रारंभ करने का प्रयास करते समय bundle exec puma -C config/puma.rbमुझे एक त्रुटि मिलती है कि पता पहले से उपयोग में है।

क्या कोई इसे ठीक करना जानता है?

bundle exec puma -C config/puma.rb
[23699] Puma starting in cluster mode...
[23699] * Version 2.11.3 (ruby 2.0.0-p353), codename: Intrepid Squirrel
[23699] * Min threads: 5, max threads: 5
[23699] * Environment: development
[23699] * Process workers: 2
[23699] * Preloading application
Jdbc-MySQL is only for use with JRuby
[23699] * Listening on tcp://0.0.0.0:3000
/.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:210:in `initialize': Address already in use - bind(2) (Errno::EADDRINUSE)
    from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:210:in `new'
    from /Users/lexi87/.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:210:in `add_tcp_listener'
    from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:96:in `block in parse'
    from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:82:in `each'
    from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/binder.rb:82:in `parse'
    from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/runner.rb:119:in `load_and_bind'
    from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/cluster.rb:302:in `run'
    from /.rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/lib/puma/cli.rb:216:in `run'
    from /rvm/gems/ruby-2.0.0-p353/gems/puma-2.11.3/bin/puma:10:in `<top (required)>'
    from /.rvm/gems/ruby-2.0.0-p353/bin/puma:23:in `load'
    from /.rvm/gems/ruby-2.0.0-p353/bin/puma:23:in `<main>'
    from /.rvm/gems/ruby-2.0.0-p353/bin/ruby_executable_hooks:15:in `eval'
    from /.rvm/gems/ruby-2.0.0-p353/bin/ruby_executable_hooks:15:in `<main>'

1
जैसा कहता है वैसा ही होता है। कोई पहले से ही पोर्ट 3000 का उपयोग कर रहा है। नेटस्टैट का उपयोग यह जानने के लिए करें कि पोर्ट 3000 पर कौन है
Mircea

4
जब मैं इसे मारने की कोशिश करता हूं तो मुझे एक त्रुटि मिलती है kill -59780 PID। मुझे बताता है invalid signal specification। मैं lsof -wni tcp:3000दिखाता था कि पोर्ट 3000 का उपयोग क्या है।
कॉर्नेलियस विल्सन

1
मारने -9 59,780 (ताकि "मार -9 pid_id" सामान्य रूप में)
Mircea

जवाबों:


288

आप उपयोग करने की आवश्यकता है kill -9 59780के साथ 59780पाया पीआईडी नंबर से बदल (प्रयोग lsof -wni tcp:3000जो इस्तेमाल किया की प्रक्रिया को देखने के लिए 3000बंदरगाह और प्रक्रिया पीआईडी मिल)।

या फिर आप सिर्फ अपने प्यूमा config TCP पोर्ट बदलने संशोधित कर सकते हैं tcp://127.0.0.1:3000से 3000करने के लिए 9292या अन्य बंदरगाह कि उपयोग नहीं किया गया।

या आप का उपयोग करके अपने रेल एप्लिकेशन शुरू कर सकते हैं:

bundle exec puma -C config/puma.rb -b tcp://127.0.0.1:3001

इस उत्तर के लिए धन्यवाद। मुझे ओपी के साथ एक ही त्रुटि मिली। और मुझे एहसास हुआ कि मैं rails sदूसरे टर्मिनल पर पहले से ही काम कर रहा हूं । इसलिए मुझे वह त्रुटि मिली। तब मैंने सर्वर को शुरू करने के लिए अलग-अलग पोर्ट का इस्तेमाल किया rails s -p 9090
Fai Zal Dong

129

प्यूमा प्रक्रिया को मारने के लिए पहले भागो

    lsof -wni tcp:3000 

यह दिखाने के लिए कि पोर्ट 3000 का उपयोग क्या है। फिर पीआईडी ​​का उपयोग करें जो कि मार प्रक्रिया को चलाने के लिए परिणाम के साथ आता है।

उदाहरण के लिए lsof -wni tcp: 3000 चलाने के बाद आपको कुछ ऐसा मिल सकता है

    COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    ruby    3366 dummy    8u  IPv4  16901      0t0  TCP 127.0.0.1:3000 (LISTEN)

अब इस प्रक्रिया को मारने के लिए निम्नलिखित चलाएँ। (जहां 3366 पीआईडी ​​है)

kill -9 3366

मसला हल करना चाहिए


धन्यवाद @ sawo-cliff यह मेरी समस्या हल मैं एक और आवेदन 3000 बंदरगाह पर चल रहा था।
नामिस

3
यह उत्तर एक वर्ष पहले स्वीकृत से अधिक जानकारी कैसे जोड़ सकता है?
आंद्रे फिगयेरिडो 20

1
@AndreFigueiredo, निश्चित रूप से मैं आपके सवाल का पालन नहीं कर रहा हूं, लेकिन थोड़ा मैं इससे चमक सकता हूं, मेरे जवाब में यह पता चला कि किस प्रक्रिया आईडी को चलाना है ताकि यह पता चल सके कि क्या मारना है।
सावो क्लिफ

हाँ। मैं अब देख सकता हूं कि मूल उत्तर DID में समान जानकारी शामिल है। लेकिन मुझे पूरी तरह से समझ में नहीं आया कि मुझे इस संस्करण को पढ़ने तक क्या करना चाहिए।
जेफ ज़िवकोविक

28

आप इस ट्रिक को भी आजमा सकते हैं:

ps aux | grep puma

नमूना उत्पादन:

myname           77921   0.0  0.0  2433828   1972 s000  R+   11:17AM   0:00.00 grep puma
myname           67661   0.0  2.3  2680504 191204 s002  S+   11:00AM   0:18.38 puma 3.11.2 (tcp://localhost:3000) [my_proj]

फिर:

kill 67661

उपयोग करें kill -9 67661यदि kill 67661वास्तव में आपके लिए प्रक्रिया को नहीं मारता है (ऊपर दिए गए उदाहरण के अनुसार)। यह मेरे लिए काम किया! चीयर्स!
विलियम हैम्पशायर

3

इस गितुब मुद्दे में नीचे दी गई स्क्रिप्ट मिली । मेरे लिए बहुत अच्छा काम करता है।

#!/usr/bin/env ruby
port = ARGV.first || 3000
system("sudo echo kill-server-on #{port}")

pid = `sudo lsof -iTCP -sTCP:LISTEN -n -P | grep #{port} | awk '{ print $2 }' | head -n 1`.strip
puts "PID: #{pid}"
`kill -9 #{pid}` unless pid.empty?

आप इसे irb में या रूबी फ़ाइल के अंदर चला सकते हैं।

उत्तरार्द्ध के लिए, इसके बाद server_killer.rbइसे बनाएंruby server_killer.rb


इसने मुझे धन्यवाद देने के लिए काम किया, लेकिन मैंने सूडो को निकाल लिया, क्योंकि मुझे इसकी आवश्यकता नहीं थी।
ओब्रोमियोस

1

आप चल रही प्रक्रियाओं को पा सकते हैं और मार सकते हैं: ps aux | grep puma फिर आप इसे मार सकते हैंkill PID


0

यदि उपरोक्त समाधान ubuntu / linux पर काम नहीं करते हैं तो आप यह कोशिश कर सकते हैं

sudo fuser -k -n tcp port

चुनने के अपने बंदरगाह पर प्रक्रियाओं को मारने के लिए इसे कई बार चलाएं। उदाहरण के लिए पोर्ट 3000 हो सकता है। यदि आप कमांड चलाने के बाद कोई आउटपुट नहीं देखते हैं, तो आप सभी प्रक्रियाओं को मार देंगे

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.