दिलचस्प पोस्ट
त्रुटि "एडीबी से कनेक्शन डाउन है, और एक गंभीर त्रुटि हुई है।" जावास्क्रिप्ट में 302 फाउंडिंग को पकड़ना एसटीएल नक्शे के लिए ऑपरेटर कंट क्यों नहीं है? मैं एक एंड्रॉइड डिवाइस को प्रोग्रामैटिक रूप से सोने से कैसे रोकूं? Django REST फ्रेमवर्क में क्रमबद्धकरण के आदेश का आदेश 'सेट इन्टर्न' बनाम 'सेटटाइमआउट' क्या यह NHibernate में उत्सुक लोड बच्चे संग्रह के लिए सही तरीका है System.MissingMethodException: विधि नहीं मिली? प्रकार के पैरामीटर के इंस्टेंटिएटिंग ऑब्जेक्ट इस धागा में कोड का क्या मतलब है? Int करने के लिए स्ट्रिंग कास्ट करने में सक्षम नहीं त्रुटि संदेश: इनपुट स्ट्रिंग एक सही प्रारूप में नहीं था कैसे सी में स्ट्रिंग को एक int बदलने के लिए कुछ अच्छे iPhone 3D / 2D ओपनजीएल ES गेम ट्यूटोरियल क्या हैं? सीएबी के साथ कस्टम सूची दृश्य में एकाधिक चयन क्या मेरे आवेदन में "एन्क्रिप्शन शामिल है"?

नोड / एक्सप्रेस: ​​EADDRINUSE, पता पहले से उपयोग में है – सर्वर को मार डालो

कनेक्ट करने के लिए मेरे पास एक सरल सर्वर नोड.जेएस में चल रहा है:

var server = require('connect').createServer(); //actions... server.listen(3000); 

मेरे कोड में मेरे पास असली हैंडलर हैं, लेकिन मूल विचार को देखते हुए। मैं जो समस्या रखता हूं वह है

 EADDRINUSE, Address already in use 

मुझे यह त्रुटि तब मिलती है जब मेरे क्रैश होने या त्रुटियों के बाद फिर से मेरे आवेदन को चालू करते हैं। चूंकि मैं टर्मिनल का एक नया उदाहरण नहीं खोल रहा हूं इसलिए ctr + z साथ प्रक्रिया बंद कर रहा हूं।

मैं काफी कुछ कर रहा हूं जो मुझे करना है सर्वर या कनेक्शन के करीब है। मैंने server.close() कॉल करने की कोशिश की। server.close() process.on('exit', ...); में process.on('exit', ...); कोई भाग्य के साथ

वेब के समाधान से एकत्रित समाधान "नोड / एक्सप्रेस: ​​EADDRINUSE, पता पहले से उपयोग में है – सर्वर को मार डालो"

process.on('exit', ..) नहीं कहा जाता है अगर प्रक्रिया क्रैश हो जाती है या मार जाती है। यह केवल तब ही कहा जाता है जब ईवेंट लूप समाप्त हो जाता है, और जब से server.close() । बंद होता है server.close() प्रकार इवेंट लूप समाप्त होता है (यह अभी भी यहां और वहां चल रहे स्टैक के लिए इंतजार करना पड़ता है) इसे बाहर निकलने की घटना के अंदर रखने का कोई मतलब नहीं है .. ।

दुर्घटना पर, process.on('uncaughtException', ..) करो process.on('uncaughtException', ..) और मारने की process.on('SIGTERM', ..) पर process.on('SIGTERM', ..)

कहा जा रहा है कि, SIGTERM (डिफ़ॉल्ट मार सिग्नल) ऐप साफ करने देता है, जबकि SIGKILL (तत्काल समाप्ति) ऐप को कुछ भी नहीं होने देंगे।

आप कमांड लाइन मार्ग भी जा सकते हैं:

 ps aux | grep node 

प्रक्रिया आईडी प्राप्त करने के लिए

फिर:

 kill -9 PID 

मारने पर -9 करना एक SIGKILL (एक SIGTERM के बजाय) भेजता है SIGTERM मेरे लिए कभी नोड से अनदेखा कर दिया गया है

मुझे यह हल करने का सबसे तेज़ तरीका था:

 killall node 

मैं अपने लैपटॉप win8 पर चल रहा है इस पर मारा यह काम किया

Cmd.exe को 'व्यवस्थापक' के रूप में चलाएं:

 C:\Windows\System32>taskkill /F /IM node.exe SUCCESS: The process "node.exe" with PID 11008 has been terminated. 

सबसे पहले, आप यह जानना चाहते हैं कि किस port 3000 का उपयोग कर रहा है

 sudo lsof -i :3000 

यह इस पोर्ट पर सभी पीआईडी सुनवाई को सूचीबद्ध करेगा, एक बार आपके पास पीआईडी ​​होने पर आप इसे निम्नलिखित के साथ समाप्त कर सकते हैं:

 kill -9 {PID} 

क्या आप लिनक्स या विंडोज़ पर हैं? यदि लिनक्स प्रकार पर: ps और अपनी नोड प्रक्रिया के पीआईडी ​​की जांच करें।

फिर, sudo kill PID

संपादित करें : विंडोज के लिए:

कार्यप्रणाली की सूची प्रदर्शित करने के लिए कार्यसूची का उपयोग करें:

tasklist /O

और उसके बाद नोड प्रक्रिया को मार डालो ( tasklist कमांड से प्राप्त पीआईडी):

taskkill /pid PID

मुझे यह त्रुटि एक बार मिल रही थी और यहां कई तरह के तरीकों को ले लिया था।

मेरी समस्या यह थी कि मेरे पास दो app.listen(3000); एक ही app.js स्क्रिप्ट में कॉल पहला ऐप.लिटैंन () सफल हुआ, जहां दूसरी ने त्रुटि को फेंक दिया।

एक अन्य उपयोगी कमांड जो मैंने पाया कि मुझे डिबग sudo fuser -k 3000/tcp जो कि आपके द्वारा शुरू की गई कोई भी दुष्ट प्रक्रियाओं को मार देगा (कुछ प्रक्रियाएं पुनरारंभ हो सकती हैं, जैसे कि हमेशा के लिए .js के साथ चलाना, लेकिन यह मेरे लिए उपयोगी था)।

मुझे यह समाधान मिला, यह कोशिश करो

  pkill node 

एफवाईआई, आप इस प्रक्रिया को एक आदेश sudo fuser -k 3000/tcp में मार सकते हैं। इसे अन्य सभी बंदरगाहों जैसे 8000, 8080 या 9000 के लिए किया जा सकता है जो आमतौर पर विकास के लिए उपयोग किया जाता है।

आप अपने सर्वर को दुर्घटनाग्रस्त / रन-टाइम-त्रुटियों से रोकने के लिए हॉट-नोड का उपयोग कर सकते हैं नोड प्रोग्राम [स्रोत] / प्रक्रिया [नोड प्रोग्राम चल रहे] में कोई परिवर्तन होने पर हॉट-नोड स्वचालित रूप से आपके लिए नोडजेएस एप्लिकेशन को पुनरारंभ करता है।

वैश्विक विकल्प का प्रयोग करते हुए एनपीएम का उपयोग करके हॉट-नोड स्थापित करें:

एनपीएम इंस्टॉल -जी हॉटनोड

पावरशेफ उपयोगकर्ता:

टास्ककिइल / आईएम नोड। एक्सई / एफ

नोड कहीं स्मृति में चल रहा है और उस बंदरगाह को बंद कर दिया गया है। Windows पर, यह समस्या होगी, जैसे अधिकांश विंडोज समस्याओं, CTRL + ALT + DEL और / या रिबूट मारकर हल हो जाएंगे

कार्य प्रबंधक (ctrl + alt + del) ->

प्रक्रिया टैब ->

"node.exe" प्रक्रिया का चयन करें और "समाप्त प्रक्रिया" को दबाएं

फॉर्म में सभी उत्तरों के सम्मान के साथ, मैं एक बिंदु जोड़ना चाहता हूं।

मैंने पाया कि जब मैं Ctrl + Z का उपयोग करते हुए त्रुटि पर एक नोड ऐप को समाप्त करता हूं, तो अगली बार जब मैं इसे खोलने का प्रयास करता हूं, तो उसे उसी त्रुटि EADDRINUSE मिला है

जब मैं एक नोड ऐप को समाप्त करने के लिए Ctrl + C का उपयोग करता हूं, तो अगली बार मैंने इसे खोल दिया था, यह बिना किसी अड़चन के किया था

समस्या को सुलझाने वाले त्रुटि के अलावा किसी अन्य चीज़ को पोर्ट नंबर बदलना

लिनक्स पर

~/.bashrc को फ़ंक्शन जोड़ें:

 function killTcpListen () { kill -9 $(lsof -sTCP:LISTEN -i:$1 -t) } 

परिवर्तन खींचें: source ~/.bashrc

और इसका उपयोग करें: killTcpListen 3000

इस मुद्दे के लिए कारण हैं:

  1. स्काइप जैसी इस पोर्ट पर कोई भी एक एप्लीकेशन चल रहा हो।
  2. नोड क्रैश हो सकता है और बंदरगाह मुक्त नहीं हो सकता है
  3. आप एक से अधिक सर्वर को प्रारंभ करने का प्रयास कर सकते हैं इस समस्या को हल करने के लिए, कोई यह जांचने के लिए बुलियन को बनाए रख सकता है कि सर्वर शुरू किया गया है या नहीं। यह केवल तभी शुरू किया जाना चाहिए जब बूलियन गलत या अपरिभाषित लौटाए;

आप एक से अधिक सर्वर का उपयोग कर सकते हैं आप उन्हें बंद कर सकते हैं और एक सर्वर का उपयोग कर सकते हैं। लिनक्स में आप killall नोड कमांड का उपयोग कर सकते हैं।

सिर्फ मामले की जांच करें कि आपने गलती से कई बार इस लाइन को जोड़ा है या नहीं

 app.listen(3000, function() { console.log('listening on 3000') }); 

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

निम्न आदेश के साथ पोर्ट 3000 पर चलने वाली पीआईडी ​​अर्थात् आईडी की जांच करें:

 lsof -i tcp:3000 

यह निम्नलिखित जैसा कुछ होगा:

 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 5805 xyz 12u IPv6 63135 0t0 TCP *:3000 (LISTEN) 

अब इस प्रक्रिया का उपयोग करें:

 kill -9 5805 

सावधान रहें कि, मेरी तरह, आपके पास एक और डॉस बॉक्स (या समान) नहीं है जो आप एक्स के बारे में भूल गए हैं)

यह ऊपर दिखाए गए सटीक त्रुटि उत्पन्न करता है!

इसका मतलब है कि आपके पास दो बंदरगाहों पर चलने वाले दो नोड सर्वर हैं, अगर एक पोर्ट पर चल रहा है तो कहना है कि 3000 एक अन्य पोर्ट को दूसरे में बदल देता है 3001 कहता है और सबकुछ ठीक से काम करेगा

मुझे आश्चर्य है, क्यों कोई भी अभी तक इस संभावना का उल्लेख नहीं किया है:

  • यदि आप प्रदान करते हैं ::listen(port) स्ट्रिंग (जानबूझकर या नहीं ::listen(port) साथ ::listen(port) , जो एक मान्य पोर्ट नंबर प्रस्तुति नहीं होगी, तो इसे आंतरिक रूप से पोर्ट नंबर -1 परिवर्तित किया जा सकता है, तो इंजन उस से कनेक्ट करने का प्रयास करेगा -1 बंदरगाह है, जो तब उसी EADDRINUSE त्रुटि उत्पन्न करता है, जो बदले में थोड़ा भ्रामक हो सकता है और आपको त्रुटि ठीक खोज ( हाय, मुझे xD ) के लिए गलत दिशा में बदल सकता है।

इसलिए, अपने कोड को डिबग करें और जांचें कि आप कार्य करने के लिए कितने पास होते हैं, प्रक्रियाओं की जांच शुरू करने से पहले, जो आपके पोर्ट का उपयोग कर रहे हैं

विन 10, जीआईटी बाश v2.15, नोड v8.9.1, एनपीएम v5.5.1

मेरे पास नोड शुरू करने के लिए एक पैकेज। जेएसओन स्क्रिप्ट था: "start": "node index.js"

जब भी मैं इसे इस्तेमाल करता हूं, चाहे मैं इसे ctrl + c के साथ मार डाला, मैं इस मुद्दे पर गया।

अगर मैं सिर्फ node index.js को node index.js से npm run start बजाय npm run start और ctrl + c के साथ मारा, मुझे यह त्रुटि नहीं मिली।

मुझे यकीन नहीं है कि क्यों, लेकिन मुझे लगा कि यह किसी को मदद कर सकता है

यह कमांड 'नोड' से संबंधित कार्यों को सूचीबद्ध करता है और उनमें से प्रत्येक को समाप्त कर दिया जाता है।

 kill -9 $( ps -ae | grep 'node' | awk '{print $1}')