त्रुटि को ठीक कैसे करें: नोडज का उपयोग करते समय ईएडीआरआरआईएनयूडी को सुनें?


466

यदि मैं पोर्ट 80 वाला सर्वर चलाता हूं, और मैं xmlHTTPrequest का उपयोग करने का प्रयास करता हूं तो मुझे यह त्रुटि मिलती है:Error: listen EADDRINUSE

यह नोडज के लिए समस्या क्यों है, अगर मैं एक अनुरोध करना चाहता हूं, जबकि मैं पोर्ट 80 पर एक सर्वर चलाता हूं? वेबब्रोजर्स के लिए यह कोई समस्या नहीं है: मैं इंटरनेट पर सर्फ कर सकता हूं, जबकि सर्वर चल रहा है।

सर्वर है:

  net.createServer(function (socket) {
    socket.name = socket.remoteAddress + ":" + socket.remotePort;
    console.log('connection request from: ' + socket.remoteAddress);
    socket.destroy();
  }).listen(options.port);

और निवेदन:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {
    sys.puts("State: " + this.readyState);

    if (this.readyState == 4) {
        sys.puts("Complete.\nBody length: " + this.responseText.length);
        sys.puts("Body:\n" + this.responseText);
    }
};

xhr.open("GET", "http://mywebsite.com");
xhr.send();

क्या आप सुनिश्चित हैं कि विकल्प .पोर्ट को 80 के रूप में परिभाषित किया गया है? क्या ब्राउज़र में XHR कोड चल रहा है? जब यह सर्वर नहीं चल रहा हो तो क्या आप "nc -l 0.0.0.0 80" चला सकते हैं?
टिमोथी मीड

इसी तरह के मुद्दे पर देखें stackoverflow.com/questions/8553957/…
मनोहर रेड्डी पोरेड्डी

आप किस सिस्टम पर हैं? कुछ सिस्टम को sudo की आवश्यकता होती है यदि आप एक निश्चित ट्रेशोल्ड के नीचे पोर्ट सुनना चाहते हैं।
केबमन

यह समस्या तब उत्पन्न होती है क्योंकि आपने या तो उस पोर्ट पर अपना सर्वर चलाया था और आपने उस पोर्ट को बंद नहीं किया था, त्रुटि स्पष्ट रूप से कहती है कि पोर्ट पहले से ही उपयोग में है यह मेरे लिए तब होता है जब मैं अन्य प्रोजेक्ट्स को बंद किए बिना बनाम कोड में एक नया प्रोजेक्ट खोलता हूं (खोलना ड्रैग एंड ड्रॉप द्वारा)
आषाढ़ नसीम

जवाबों:


412

EADDRINUSEइसका मतलब है कि पोर्ट नंबर जो listen()सर्वर को बांधने की कोशिश करता है वह पहले से ही उपयोग में है।

तो, आपके मामले में, पहले से ही पोर्ट 80 पर एक सर्वर होना चाहिए।

यदि आपके पास इस पोर्ट पर एक और वेबसर्वर चल रहा है, तो आपको उस सर्वर के पीछे नोड.जेएस लगाना होगा और इसके माध्यम से प्रॉक्सी करना होगा।

आपको listeningइस तरह की घटना की जांच करनी चाहिए , यह देखने के लिए कि क्या सर्वर वास्तव में सुन रहा है:

var http=require('http');

var server=http.createServer(function(req,res){
    res.end('test');
});

server.on('listening',function(){
    console.log('ok, server is running');
});

server.listen(80);

1
मैं केवल इस सर्वर को चलाता हूं। Befor मैं सर्वर शुरू करता हूं, xmlhttprequest काम करता है। मैं पोर्ट 80 पर सर्वर शुरू करने के बाद, फिर सर्वर भी पूरी तरह से काम करता है। लेकिन अगर मैं सर्वर शुरू करने के बाद xmlhttprequest करता हूं, तो मुझे यह त्रुटि मिलती है।
डैनी फॉक्स

6
यदि सर्वर पहले से ही सुन रहा है तो क्या यह अभी भी एक त्रुटि नहीं करेगा?
कोशिश

1
मेरे लिए यह स्काइप के कारण था
बीप

559

क्या वास्तव में मेरे लिए मदद की थी:

killall -9 node

लेकिन यह एक सिस्टम प्रोसेस को मार देगा।

साथ में

ps ax

आप जाँच कर सकते हैं कि यह काम किया है या नहीं।


1
यह भी मेरे लिए। मेरे मामले में मैं सिर्फ दो बार सुनने का कार्य चलाता हूं और दूसरे में त्रुटि मिली
vabada

2
संबंधित नोट पर आप यह भी पढ़ सकते हैं कि कब मुझे किलो -9 की प्रक्रिया नहीं करनी चाहिए
नोबिता

12
यहां मुद्दा यह है कि आप लोग पहले रन के बाद नोड प्रक्रिया को इनायत से बाहर नहीं निकाल रहे हैं। इसलिए, नोड अभी भी उस पोर्ट से बंधा हुआ है। ps aux | grep nodeयह दिखाएगा। CTRL + Z के साथ एप्लिकेशन को मारने के बजाय , CTRL + C के साथ एप्लिकेशन से बाहर निकलें । यह एप्लिकेशन को इनायत से बाहर निकालता है और पोर्ट बाइंडिंग हटा दिया जाता है।
रिसर101

22
एक समाधान के लिए 150 से अधिक वोट जो आपके सॉफ़्टवेयर को एक मैलेट से टकराने के बराबर है।
लीगी

1
यह समाधान काफी समस्याग्रस्त है क्योंकि -9 ध्वज स्मृति को मुक्त किए बिना प्रक्रिया को मार देगा। आपको वास्तव में केवल अंतिम समाधान के रूप में इसका उपयोग करना चाहिए।
याकी क्लेन

279

killall -9 nodeपैट्रिक द्वारा उल्लिखित उक्त , अपेक्षित रूप से काम करता है और समस्या को हल करता है, लेकिन आप इस उत्तर के संपादन भाग को पढ़ना चाह सकते हैं क्योंkill -9 का सबसे अच्छा तरीका नहीं हो सकता है।

इसके शीर्ष पर आप आँख बंद करके सभी को मारने के बजाय एक ही प्रक्रिया को लक्षित करना चाह सकते हैं सक्रिय प्रक्रियाओं को ।

उस स्थिति में, पहले उस पोर्ट पर चलने वाली प्रक्रिया का आईडी (पीआईडी) प्राप्त करें (8888 कहें):

lsof -i tcp:8888

यह कुछ इस तरह लौटेगा:

COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     57385   You   11u  IPv6 0xac745b2749fd2be3      0t0  TCP *:ddi-tcp-1 (LISTEN)

तो बस करो (पी एस - वास्तव में नहीं है । कृपया नीचे पढ़ते रहें):

kill -9 57385

आप यहां इसके बारे में थोड़ा और पढ़ सकते हैं ।

संपादित करें: मैं आज एक काफी संबंधित विषय पर पढ़ रहा था और इस दिलचस्प सूत्र पर ठोकर खाई कि मुझे kill -9एक प्रक्रिया क्यों नहीं करनी चाहिए

आम तौर पर, आपको टारगेट प्रक्रिया को खुद के बाद साफ करने का मौका देने के लिए किल -9 से पहले किल -15 का उपयोग करना चाहिए । (प्रक्रिया SIGKILL को पकड़ या अनदेखा नहीं कर सकती है, लेकिन वे अक्सर SIGTERM को पकड़ सकते हैं।) यदि आप प्रक्रिया को खत्म करने का मौका नहीं देते हैं तो यह क्या कर रहा है और इसे साफ कर सकता है, यह दूषित फ़ाइलों (या अन्य राज्य) को छोड़ सकता है एक बार पुनः आरंभ करने पर यह समझ में नहीं आएगा।

इसलिए, जैसा कि कहा गया है कि आपको उपरोक्त प्रक्रिया को बेहतर ढंग से मारना चाहिए:

kill -15 57385

EDIT 2 : जैसा कि यहां एक टिप्पणी में कई बार कहा गया है कि यह त्रुटि किसी प्रक्रिया को इनायत से बाहर न करने का परिणाम है। इसका मतलब है, बहुत से लोग CTRL + Z का उपयोग करके एक नोड कमांड (या किसी अन्य) से बाहर निकलते हैं । किसी रनिंग प्रक्रिया को रोकने का सही तरीका CTRL + C जारी कर रहा है कमांड जो एक स्वच्छ निकास करता है।

एक प्रक्रिया से बाहर निकलने पर सही तरीके से उस बंदरगाह को बंद कर दिया जाएगा। यह आपको इसे फिर से चलाने में सक्षम होने से पहले खुद को मारने की परेशानी से गुजरने के बिना प्रक्रिया को फिर से शुरू करने की अनुमति देगा।


मुझे यह आदेश कहां चलना चाहिए? कमांड प्रॉम्प्ट पर? एनपीएम कंसोल पर?
यूलिसिस अल्वेस

@UlyssesAlves सिर्फ एक टर्मिनल विंडो खोलते हैं और वहां से प्रक्रिया को मारते हैं।
नोबिता

@Nobita क्या विंडोज में काम करती है? अब मुझे एहसास हुआ कि यह एक मैक ओएस कमांड हो सकता है। वैसे भी, मैंने अपने पीसी को रीस्टार्ट किया और अब यह त्रुटि नहीं हुई। मुझे लगता है कि कुछ अन्य अनुप्रयोग उसी पोर्ट नोड का उपयोग कर रहे थे जो उपयोग करने की कोशिश कर रहा था।
Ulysses Alves

2
pgrep nodeदिखाता है कि कोई नोड प्रक्रिया आप पर दूर चला गया है। pkill nodeउन्हें मार डालेगा।
जोश।

3
विंडोज़ के लिए नहीं, दोस्तों - आपको एक और पोर्ट या रीबूट कंप्यूटर आज़माना होगा: P
टॉम स्टिकेल

62

बस एक हेड अप है, स्काइप कभी-कभी पोर्ट 80 पर सुनेगा और इसलिए यदि आप नोड 80.js या किसी अन्य ऐप से पोर्ट 80 पर सुनने का प्रयास करते हैं, तो यह त्रुटि होती है।

आप विकल्पों तक पहुँच और उन्नत पर क्लिक करके Skype में उस व्यवहार को बंद कर सकते हैं -> कनेक्शन -> पोर्ट 80 का उपयोग करें (इसे अनचेक करें)

Skype पोर्ट 80 उपयोग बंद करें

PS उस परिवर्तन को करने के बाद, Skype को पुनरारंभ करना न भूलें!


14
PS उस परिवर्तन को करने के बाद, Skype को पुनरारंभ करना न भूलें!
रॉब इवांस

16
यह मैंने कभी देखा है सबसे अधिक डंपिंग डिजाइन दोषों में से एक है। स्काइपे के देवता कितने पागल हैं कि वे कभी 80 या 443 लेने पर विचार करेंगे ?
एजेबी

5
अपने डीबगिंग कौशल के लिए बिग +1 हालांकि, रोब।
एजेबी

@AJB उन्होंने यह करने की कोशिश की और फ़ायरवॉल के माध्यम से पंच करने के लिए जो http अनुरोधों के लिए आउटबाउंड ट्रैफ़िक को सीमित करता है, लेकिन जहाँ फ़ायरवॉल DPI का उपयोग नहीं कर रहे हैं, इसलिए बस बेसिक पोर्ट ब्लॉकिंग करें। फिर भी ... यह डिफ़ॉल्ट रूप से सक्षम करने के लिए थोड़ा मूर्खतापूर्ण है!
रॉब इवांस

हाँ, यह मेरे विचार से हुआ कि वे ऐसा क्यों करेंगे। फिर भी, वास्तव में बदसूरत कीचड़। और यह विचार कि यह डिफ़ॉल्ट रूप से सक्षम है, केवल सादा अभिमानी है।
एजेबी

38

आपको उस प्रक्रिया को मारने की कोशिश करनी चाहिए जो पोर्ट 80 पर सुन रही है।

किलॉल सभी नोड ऐप्स को चलाएगा। आप ऐसा नहीं करना चाह सकते हैं। इस कमांड से आप केवल एक ही ऐप को मार सकते हैं जो एक ज्ञात पोर्ट पर सुन रहा है।

यदि यूनिक्स का उपयोग करके इस कमांड को आज़माएँ:

sudo fuser -k 80/tcp    

1
धन्यवाद याकी किलॉल नोड मेरे लिए विफल रहा लेकिन यह काम किया।
Pat M

धन्यवाद! किलॉल और lsof -i ने मेरे लिए काम नहीं किया, लेकिन यह किया।
karfus

1
आप चल रहे सभी नोड ऐप्स को मारना नहीं चाह सकते हैं।
यकी क्लेन

28

त्रुटि का कारण: आप व्यस्त का उपयोग करने की कोशिश कर रहे हैंport number

विंडोज / मैक के लिए दो संभावित समाधान

  1. वर्तमान में उपयोग किया जाने वाला पोर्ट नंबर
  2. अपने वर्तमान कार्यक्रम के लिए एक और पोर्ट नंबर चुनें


1. फ्री पोर्ट नंबर

खिड़कियाँ

1. netstat -ano | findstr :4200
2. taskkill /PID 5824 /F

यहाँ छवि विवरण दर्ज करें

मैक

आप नेटस्टैट की कोशिश कर सकते हैं

netstat -vanp tcp | grep 3000

OSX El Capitan और नए (या यदि आपका netstat -p समर्थन नहीं करता है) के लिए, lsof का उपयोग करें

sudo lsof -i tcp:3000

यदि यह आपकी समस्या का समाधान नहीं करता है, तो Macउपयोगकर्ता इस मुद्दे के बारे में पूरी चर्चा का उल्लेख कर सकते हैं (और मारें) मैक पर पोर्ट 3000 को लॉक करने की प्रक्रिया


2. पोर्ट नंबर बदलें?

खिड़कियाँ

set PORT=5000

मैक

export PORT=5000

आप विंडोज़ में एक कमांड में भी कर सकते हैं:netstat -ona | findstr ".0:PORT +0.0.0.0:0 +LISTENING" | for /f "tokens=5" %t in ('more') do taskkill /PID:%t /f
Z। खुल्ला

27

एक नियंत्रक एनवी के तहत, आप उपयोग कर सकते हैं:

pkill node अपनी स्क्रिप्ट चलाने से पहले काम करना चाहिए।

भालू इस आदेश को ध्यान में रखते हुए सभी को मार डालेगा node प्रक्रियाओं , जो कि आपके पास हो सकता है यदि आपके पास एक कंटेनर है जो केवल एक उदाहरण है, हमारे पास आपके पास ऐसे एनवी हैं जहां आप गारंटी दे सकते हैं।

किसी भी अन्य परिदृश्य में, मैं एक निश्चित प्रक्रिया आईडी या नाम जिसे आप इसे प्रोग्रामेटिक रूप से देख रहे हैं, को मारने के लिए एक कमांड का उपयोग करने की सलाह देते हैं। जैसे यदि आपकी प्रक्रिया को कॉल किया जाता है, तो नोड-सर्वर -1 आप कर सकते हैं pkill node-server-1

यह संसाधन समझने के लिए उपयोगी हो सकता है: https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/


2
pgrep nodeहाथ से पहले अगर आप थोड़ा सावधान रहना चाहते हैं और देखें कि क्या nodeप्रक्रियाएं चल रही हैं
जोश।

1
पूरी तरह से!, मैं इस मामले में बात कर रहा था कि यह प्रक्रिया के लिए एक कंटेनर या बहुत नियंत्रित जगह थी।
जेवियर कोबोस

यह भयानक उत्तर है जो मैं ऊपर दिए गए अन्य लोगों की तुलना में कहूंगा। हर कोई इसे उभारता है।
जितेन्द्र पवार

@JavierCobos: यदि आप एक कंटेनर या इसी तरह के नियंत्रित स्थान के लिए बोल रहे थे, तो कृपया उस जानकारी को उत्तर में जोड़ें। बहुत से लोग ऐसे वातावरण में नहीं हैं, विशेष रूप से एक विकास मशीन पर, और यह अनपेक्षित परिणाम हो सकता है जैसा कि है। डाउनवोटिंग, लेकिन उचित स्पष्टीकरण के साथ वोट को बदलने के लिए खुश।
lindes

1
कई ... लेकिन जैसा कि कोई है जो ट्रेन जूनियर डेवलपर्स की मदद करने के लिए महत्वपूर्ण समय बिताता है, और यहां तक ​​कि उस संदर्भ से परे, मैं आपको बता सकता हूं कि बहुत से लोग स्टैक ओवरफ्लो पर जवाब का उपयोग वास्तव में समझने के बिना करते हैं कि वे क्या कर रहे हैं। .. वे सिर्फ एक समस्या का सामना कर रहे हैं, और एक समस्या के रूप में प्रतिनिधित्व कुछ देखते हैं जो उनकी समस्या लगती है, और वे इसके साथ चलते हैं। इसलिए ... मैं व्यक्तिगत रूप से साइट को अच्छी व्याख्याएं देने और अच्छी सामान्य आदतों को बढ़ावा देने की इच्छा रखता हूं। इसलिए, मैं यहीं से आ रहा हूं। मुझे पता है कि यह एकमात्र परिप्रेक्ष्य नहीं है, हालांकि। :)
lindes

16

आपका आवेदन पहले से ही उस पोर्ट 8080 पर चल रहा है। पोर्ट को मारने और फिर से अपना कोड चलाने के लिए इस कोड का उपयोग करें

sudo lsof -t -i tcp:8080 | xargs kill -9

प्रश्न 80, पोर्ट 8080 का संदर्भ देता है। इसके अलावा, हालांकि यह संभवतः पोर्ट 8080 पर एक आक्रामक प्रक्रिया से छुटकारा पाने के लिए काम करेगा, का उपयोग kill -9करना लगभग निश्चित रूप से ओवरकिल है, और, मेरी राय में, विशिष्ट चेतावनी के बिना देने के लिए सलाह का एक भयानक टुकड़ा। यह। बस killशायद चाल, और वास्तव में, इस सवाल में मूलभूत समस्या है, मुझे लगता है, कि वे एक सर्वर को बार-बार चलाने की कोशिश कर रहे हैं , इसलिए यह केवल एक हैक है, एक फिक्स नहीं। उन्हें इस बात की बेहतर समझ होनी चाहिए कि क्या चल रहा है, जो यह जवाब वास्तव में प्रदान नहीं करता है।
19

15

एक और चीज़ जो यह त्रुटि दे सकती है, वह है एक ही नोड कोड में दो HTTP सर्वर। मैं कुछ एक्सप्रेस 2 से एक्सप्रेस 3 कोड को अपडेट कर रहा था, और यह था ...

http.createServer(app).listen(app.get('port'), function(){            
  console.log('Express server listening on port ' + app.get('port')); 
});        

// tons of shit.

http.createServer(app).listen(app.get('port'), function(){            
  console.log('Express server listening on port ' + app.get('port')); 
});                                                                   

और, इस त्रुटि को ट्रिगर किया।


14

यह मेरे लिए काम करता है (मैं मैक का उपयोग कर रहा हूं)। यह आदेश चलाएँ

lsof -PiTCP -sTCP:LISTEN

यह उन बंदरगाहों की एक सूची प्रदर्शित करने जा रहा है, जिनका उपयोग आपका शब्दांश कर रहा है। पता लगाएं PIDकि आपका नोड चल रहा है

COMMAND     PID          USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node      17269 hientrq   16u  IPv6 0xc42959c6fa30c3b9      0t0  TCP *:51524 (LISTEN)
node      17269 hientrq   19u  IPv4 0xc42959c71ae86fc1      0t0  TCP localhost:1337 (LISTEN)

और भाग खड़ा हुआ kill -9 [YOUR_PID]


11

EADDRINUSEइसका मतलब है कि पोर्ट (जिसे हम नोड एप्लिकेशन में सुनने की कोशिश करते हैं) पहले से ही इस्तेमाल किया जा रहा है। दूर करने के लिए, हमें यह पहचानने की आवश्यकता है कि कौन सी प्रक्रिया उस पोर्ट के साथ चल रही है।

उदाहरण के लिए यदि हम 3000 पोर्ट में अपना नोड एप्लिकेशन सुनने का प्रयास कर रहे हैं। हमें यह जांचने की आवश्यकता है कि क्या उस पोर्ट का उपयोग पहले से ही किसी अन्य प्रक्रिया द्वारा किया जा रहा है।

चरण 1:

$sudo netstat -plunt |grep :3000

कि उपरोक्त कमांड नीचे परिणाम देता है।

tcp6       0      0 :::3000                 :::*                    LISTEN      25315/node

चरण 2:

अब आपको प्रोसेस आईडी (25315) मिल गई, उस प्रक्रिया को मार दें।

kill -9 25315

चरण 3:

npm run start

नोट: लिनक्स उपयोगकर्ताओं के लिए यह समाधान।


9
lsof -i:3000;
kill -9 $(lsof -t -i:3000);
// 3000 is a your port
// This "lsof -i:3000;" command will show PID 
kill PID 
ex: kill 129393

3
भविष्य के पाठकों को कोड / कमांड को समझने में मदद करने के लिए कृपया अपने उत्तरों में अधिक संदर्भ जोड़ें।
मिलो

8

सूदो $ को मारना (sudo lsof -t -i: 80)

बलपूर्वक हत्या के लिए

सूदो मार -9 $ (सूदो lsof -t -i: 80)

विशेष पोर्ट को मारने के लिए cmd से ऊपर का उपयोग करें और फिर अपना सर्वर चलाएं


8

दोनों कमांड का प्रयास करें और यह सभी नोड प्रक्रिया को रोक देगा।

killall 9 node
pkill node
npm start 

1
इस हैक ने मेरी बहुत मदद की, धन्यवाद समय बचाने के लिए
अनूप PS

5

यह त्रुटि तब आती है जब आपके पास पोर्ट पर चलने वाली कोई प्रक्रिया होती है, जिस पर आप अपना एप्लिकेशन चलाना चाहते हैं।

उस पोर्ट पर किस प्रक्रिया को कैसे चलाया जाए => कमांड: sudo netstat -ap | grep: 3000

आउटपुट: आपको प्रक्रिया की जानकारी मिलेगी जो उस पोर्ट का उपयोग कर रही है

tcp 0 0 IPaddress: 3000 : LISTEN 26869 / नोड

अब आप उस प्रक्रिया को मार सकते हैं सूदो -9 26869 को मार सकते हैं


सभी उत्तरों की जाँच की। लेकिन तुम मेरी समस्या का समाधान करो।
राहुल


5

EADDRINUSE का अर्थ है कि आपका नोडज एप्लिकेशन का पोर्ट पहले से उपयोग में है।

  • अब आपने उस पोर्ट पर चल रही प्रक्रिया / एप को मार दिया है।
  • एप्लिकेशन की प्रक्रिया आईडी खोजें:

lsof -i tcp: 3000

  • अब u को इससे id प्राप्त होगी।
  • इसे चलाओ:

मार -9 प्रक्रिया आई डी


4

कार्य प्रबंधक का उपयोग करके प्रक्रिया को समाप्त करने का एक तरीका है:

ध्यान दें कि यह समाधान केवल विंडोज के लिए है

  1. कार्य प्रबंधक पर जाएँ (या का उपयोग कर शॉर्टकट Ctrl+ Shift+ Esc)

  2. "पृष्ठभूमि प्रक्रियाओं" पर, "Node.js" प्रक्रियाओं को खोजें और उन्हें समाप्त करें (उन्हें राइट-क्लिक करें और "एंड टास्क" चुनें)

यहाँ छवि विवरण दर्ज करें

  1. अब आपको फिर से शुरू करने में सक्षम होना चाहिए

मैक उपयोगकर्ताओं के लिए: 1. 'एक्टिविटी मॉनिटर' लॉन्च करें। टॉप-राइट पर सर्च बार में 'नोड' खोजें। 3. नोड प्रक्रिया पर डबल क्लिक करें और छोड़ें। तुम पूरी तरह तैयार हो!!!! खुश कोडिंग।
अपोगी

3

मैंने http.client के साथ (नोड में) पहले यह त्रुटि देखी है, और जैसा कि मुझे याद है, httpClient को प्रारंभ न करने या httpClient निर्माण और / या url अनुरोध में खराब विकल्पों को सेट करने में समस्या का सामना करना पड़ा था।


3

मेरे पास भी यही समस्या है, और मैं बस टर्मिनल को बंद कर देता हूं और एक नया टर्मिनल खोलता हूं और चलाता हूं

node server.js

फिर। मेरे लिए यह काम करता है, कुछ समय बस कुछ सेकंड तक इंतजार करने की जरूरत है जब तक यह फिर से काम न करे।

लेकिन यह सर्वर कंसोल के बजाय केवल डेवलपर मशीन पर काम करता है।


3

त्रुटि: सुनो EADDRINUSE का मतलब उस पोर्ट से है जिसे आप अपने एप्लिकेशन सर्वर को असाइन / बाइंड करना चाहते हैं जो पहले से उपयोग में है। आप या तो अपने आवेदन के लिए एक और बंदरगाह आवंटित कर सकते हैं।

या यदि आप ऐप को एक ही पोर्ट असाइन करना चाहते हैं। फिर उस एप्लिकेशन को मार दें जो आपके इच्छित पोर्ट पर चल रहा है।

नोड एप्लिकेशन के लिए आप क्या प्रयास कर सकते हैं, नोड ऐप के लिए प्रक्रिया आईडी खोजें:

ps -aux | grep node

प्रोसेस आईडी मिलने के बाद करें

kill process_id

खिड़कियों पर 10?
टॉम स्टिकेल

No -aux linux आधारित सिस्टम के लिए है। विंडोज़ आधारित सिस्टम के लिए आप वांछित नोड प्रक्रिया के लिए सिस्टम मॉन्टियर को देख सकते हैं और इसे समाप्त कर सकते हैं।
पार्थ व्यास

2

डेबियन पर मुझे पता चला कि पोर्ट 80 पर आपको कमांड को रूट के रूप में जारी करने की आवश्यकता है

sudo node app.js

मुझे उम्मीद है यह मदद करेगा


2

मेरे मामले में Apache HTTP सर्वर को पोर्ट 80 पर चलाया गया था, मैंने इसे कमांड को रूट के रूप में हल किया था

sudo killall httpd

अपडेट करें

यदि जेनकिन आपके मैक पर स्थापित और चल रहा है;

  1. आप इससे जांच कर सकते हैं sudo lsof -i tcp:8080
  2. यदि हाँ, और आप जेनकिंस को केवल एक बार रोकना चाहते हैं, तो दौड़ें: sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

2

लगता है कि एक और नोड एन डी सर्विंग प्रक्रिया चल रही है। इसे अपने कंसोल (लिनक्स / मैक) में टाइप करके देखें:

ps aux|grep node

और इसे छोड़ दो:

kill -9 <NodeProcessId>

या अल्टरनेटिव का उपयोग करें

ng serve --port <AnotherFreePortNumber>

अपनी पसंद के मुफ्त पोर्ट पर अपनी परियोजना की सेवा के लिए।


1

NODE_PORT को मारते समय, यह आपकी क्रोम प्रक्रिया या किसी भी चीज़ को मार सकता है जो समान पोर्ट को सुन रही है, और यह कष्टप्रद है।

यह शेल स्क्रिप्ट सहायक हो सकती है - मेरे मामले में पोर्ट 1337 है, लेकिन आप इसे कभी भी बदल सकते हैं

# LOGIC

CHROME_PIDS=`pidof chrome`
PORT_PIDS=`lsof -t -i tcp:1337`

for pid in $PORT_PIDS
do

if [[ ${CHROME_PIDS} != *$pid* ]];then

    # NOT FOUND IN CHROME PIDS

    echo "Killing $pid..."
    ps -p "$pid"

    kill -kill "$pid"
    fi

done

sails lift
# OR 'node app' OR whatever that starts your node

exit

1

मेरे मामले में मैं एक वेब होस्टिंग का उपयोग करता हूं, लेकिन स्थानीय होस्ट में भी ऐसा ही होता है, मैंने इसका इस्तेमाल किया है:

ps -aef | grep 'node' 

नोड प्रक्रिया को देखने के लिए, कंसोल PID के साथ प्रक्रिया दिखाता है। इस आदेश का उपयोग करने के लिए आपको इस प्रक्रिया को मारना होगा:

kill -9 PID

जहां PID ऊपर के कमांड से प्रोसेस आईडी है।


1

दो सर्वर एक ही पोर्ट पर नहीं सुन सकते हैं, इसलिए देखें कि क्या अन्य सर्वर एक ही पोर्ट पर सुन रहा है, ब्राउजर सिंक के लिए भी देखें कि क्या अन्य पोर्ट पर चल रहा है


1

अन्य लोगों के लिए विंडोज़ 10 पर नोड के साथ localhostऔर 3500 की तरह पोर्ट पर चल रहा है, न कि 80 ...

क्या काम नहीं करता है:

killall    ?  command not found
ps -aux | grep 'node'     ?     ps:  user x unknown 

क्या जानकारी दिखाता है लेकिन फिर भी काम नहीं करता है:

 ps -aef | grep 'node'
 ps ax
 kill -9 61864

क्या काम करता है:

Git Bash या Powershell on Windows

  net -a -o | grep 3500   (whatever port you are looking for) 

पीआईडी ​​को नोटिस करें (अभी तक सही)
मुझे killallकाम नहीं मिला ... इसलिए

  1. अपना कार्य प्रबंधक खोलें
  2. प्रक्रियाओं टैब पर, नाम या किसी भी कॉलम पर राइट क्लिक करें और पीआईडी ​​को शामिल करने का चयन करें
  3. PID द्वारा सॉर्ट करें, फिर राइट PID पर राइट क्लिक करें और एंड टास्क पर क्लिक करें।

अब इसके बाद खिड़कियों पर इतना मजेदार व्यायाम नहीं हुआ, मुझे लगा कि मैं कार्य प्रबंधक का उपयोग कर सकता हूं और नोड इंजन ढूंढ सकता हूं और इसे समाप्त कर सकता हूं।

FYI करें, मैं पोर्ट 3500 पर नोड चलाने के लिए Visual Studio कोड का उपयोग कर रहा था, और मैं VS कोड के अंदर Git बैश शेल का उपयोग करता हूं। मैं चुपचाप Ctrl + C के साथ बाहर निकल गया था, लेकिन कभी-कभी यह इसे नहीं मारता है। मैं अपना पोर्ट बदलना या रिबूट नहीं करना चाहता, इसलिए यह काम किया। उम्मीद है कि यह दूसरों की मदद करे। अन्यथा यह स्वयं के लिए प्रलेखन है।


1

के लिए खिड़कियों उपयोगकर्ताओं PowerShell विंडो में निम्न आदेश निष्पादित सभी नोड प्रक्रियाओं को बंद करने।

Stop-Process -processname node

1

जो विकल्प मेरे लिए काम कर रहा है:

Daud:

ps -ax | grep node

आपको कुछ मिलेगा:

 8078 pts/7    Tl     0:01 node server.js
 8489 pts/10   S+     0:00 grep --color=auto node    
 kill -9 8078
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.