मैं यह कैसे देख सकता हूं कि मोंगो शेल से पोर्ट्स मोंगो क्या सुन रहा है?


100

अगर मेरे पास एक मोंगो इंस्टेंस चल रहा है, तो मैं कैसे जांच सकता हूं कि शेल से क्या पोर्ट नंबर सुनाई दे रहा है? मैंने सोचा था कि db.serverStatus()यह करूंगा लेकिन मैं इसे नहीं देखता। मैंने यह देखा

"connections" : {
    "current" : 3,
    "available" : 816

जो करीब है ... लेकिन नहीं। सुझाव? मैंने डॉक्स पढ़ा है और ऐसा करने वाली कोई भी कमांड नहीं मिल रही है।


क्या आपको मोंगो शेल की आवश्यकता है? या नियमित यूनिक्स शेल क्या करेंगे? :)
सर्जियो तुलेंत्सेव

@SergioTulentsev मैं विशेष रूप से सोच रहा हूं कि क्या यह मुंगो शेल के अंदर संभव है - क्योंकि मुझे पहले से ही जानकारी मिली है जो करीब है।
ज्वलंत

जवाबों:


72

सिस्टम शेल से आप उपयोग कर सकते हैं lsof(नीचे डेरिक का उत्तर देखें) या netstat -anयह देखने के लिए कि वास्तव में एक प्रक्रिया क्या कर रही है। हालांकि, यह मानते हुए कि आपके पास केवल mongoशेल तक पहुंच है (जो आपका प्रश्न शीर्षक है), फिर आप serverCmdLineOpts()कमांड चला सकते हैं । वह आउटपुट आपको कमांड लाइन (argv) और कॉन्फिग फाइल (पार्स) से पारित किए गए सभी तर्क देगा और आप अनुमान लगा सकते हैं कि पोर्ट mongodउस जानकारी के आधार पर सुन रहा है। यहाँ एक उदाहरण है:

db.serverCmdLineOpts()
{
    "argv" : [
        "./mongod",
        "-replSet",
        "test",
        "--rest",
        "--dbpath",
        "/data/test/r1",
        "--port",
        "30001"
    ],
    "parsed" : {
        "dbpath" : "/data/test/r1",
        "port" : 30001,
        "replSet" : "test",
        "rest" : true
    },
    "ok" : 1
}

यदि आपने ऊपर वाले की तरह विशिष्ट पोर्ट विकल्प पारित नहीं किया है, तो डिफ़ॉल्ट रूप से mongod27017 और 28017 ( http कंसोल ) पर सुनवाई होगी । नोट: कुछ अन्य तर्क हैं जो स्पष्ट होने के बिना बंदरगाहों को बदल सकते हैं, यहां देखें:

https://docs.mongodb.org/manual/reference/configuration-options/#sharding.clusterRole


4
मेरा परिणाम है: { "argv" : [ "mongod" ], "parsed" : { }, "ok" : 1 }जो मुझे ज्यादा नहीं बताता है। मुझे लगता है कि यह मुझे बता रहा है कि मैं डिफ़ॉल्ट पोर्ट पर हूं।
ज्वलंत

5
सही - अगर यह बिल्कुल भी निर्दिष्ट नहीं है (और आपके मामले में ऐसा लगता है) तो सब कुछ चूक है, जो आपको 27017 पर डालता है
एडम कॉमरफोर्ड

219

आप इसे चलाकर ऑपरेटिंग सिस्टम शेल से कर सकते हैं:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo

4
@SmartyTwiti मैंने स्पष्ट रूप से मानगो शेल का उपयोग करके एक कमांड के लिए कहा; lsof काम नहीं करता है
jcollum

36

इसे इस्तेमाल करे:

db.runCommand({whatsmyuri : 1})

यह आईपी पते और पोर्ट नंबर दोनों को प्रदर्शित करेगा।


क्या यह नया है? मोंगो के किस संस्करण में यह दिखा?
जुल्म

1
@jcollum संस्करण 3.0 में यह नई सुविधा है।
गणु

6
ऐसा लगता है कि शेल का पोर्ट या कुछ और lsofदिखता है ... आउटपुट से :> मोंगॉड 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 टीसीपी *: 27017 (लिस्टेन) और whatsmyurlकमांड से: "" आप ":" 127.0.0.1:50294 "," ठीक है: "1" } और वे मेल नहीं खाते।
dmi3y

11

MongoDB केवल एक पोर्ट पर डिफ़ॉल्ट रूप से (27017) सुनता है। अगर द--rest इंटरफ़ेस सक्रिय है, तो पोर्ट 28017 (27017 + 1000) भी विवरण के लिए खुले वेब अनुरोधों को संभालना होगा।

MongoDB एक getParameterकमांड का समर्थन करता है , लेकिन यह केवल तभी काम करता है जब आप पहले से ही डेटाबेस से जुड़े हों (जिस बिंदु पर आप पहले से ही पोर्ट जानते हैं)।


2
हम्म, इसलिए हम कह सकते हैं कि यदि मैं कनेक्टेड हूं और पोर्ट नहीं जानता, तो यह 27017 होना चाहिए। यदि पोर्ट 27017 नहीं है, तो मुझे कनेक्ट करने के लिए पोर्ट पता होना चाहिए। सही लग रहा है?
ज्वलंत

1

निम्नलिखित कमांड का प्रयास करें, यह मेरे लिए एक काम है:

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