2012-02-19 13 views
73

Se ho un'istanza di mongo in esecuzione, come posso controllare quali numeri di porta sta ascoltando dalla shell? Pensavo che lo db.serverStatus() lo farebbe ma non lo vedo. Vedo questocome posso vedere quali porte sta ascoltando mongo dalla shell mongo?

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

che è vicino ... ma no. Suggerimenti? Ho letto i documenti e non riesco a trovare alcun comando che lo farà.

+0

Hai bisogno di guscio di mongo? O farebbe una shell unix regolare? :) –

+0

@SergioTulentsev Mi sto chiedendo in particolare se questo è possibile all'interno della shell mongo - dato che ho già trovato informazioni che sono vicine. – jcollum

risposta

59

Dal sistema shell è possibile utilizzare lsof (vedi risposta di Derick di seguito) o netstat -an per vedere ciò che un processo sta effettivamente facendo. Tuttavia, supponendo di avere accesso solo alla shell mongo (che implica il titolo della domanda), è possibile eseguire il comando serverCmdLineOpts(). Quell'output ti darà tutti gli argomenti passati sulla riga di comando (argv) e quelli dal file di configurazione (analizzato) e puoi dedurre le porte che mongod sta ascoltando in base a quelle informazioni. Ecco un esempio:

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 
} 

Se non hai superato opzioni di porta specifici come quelli di cui sopra, allora la mongod sarà in ascolto su 27017 e 28017 (http console) per impostazione predefinita. Nota: ci sono un paio di altri argomenti che possono alterare le porte senza essere esplicito, vedere qui:

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

+4

Il mio risultato è: '{" argv ": [" mongod "]," analizzato ": {}," ok ": 1}' Questo non mi dice molto. Immagino che mi stia dicendo che sono sulla porta predefinita. – jcollum

+4

right - se non è specificato affatto (e nel tuo caso sembra che sia così) allora tutto è di default, il che ti mette su 27017 –

10

MongoDB ascolta solo su una porta per impostazione predefinita (27017). Se l'interfaccia --rest è attiva, la porta 28017 (27017 + 1000) sarà aperta anche per gestire le richieste Web per i dettagli.

MongoDB supporta un comando getParameter, ma funziona solo se si è già connessi al database (a questo punto si conosce già la porta).

+2

Hmm, quindi possiamo dire che se sono connesso e non conosco la porta, deve essere 27017. Se la porta non è 27017, devo conoscere la porta per connettersi. Suono giusto? – jcollum

+0

Sì, penso che sia valido. –

184

Puoi farlo dalla shell del sistema operativo eseguendo:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo 
+7

deve essere la risposta accettata ... –

+1

questa uscita era molto concisa e chiara: –

+4

@SmartyTwiti Ho chiesto esplicitamente un comando usando la shell mongo; lsof non funziona – jcollum

21

Prova questa:

db.runCommand({whatsmyuri : 1}) 

Sarà visualizzare sia l'indirizzo IP e il numero di porta .

+0

è nuovo? in quale versione di mongo è apparso? – jcollum

+1

@jcollum La versione 3.0 ha questa nuova funzionalità. – Ganu

+4

Questo sembra mostra porto di shell o qualcosa del genere ... uscita da 'lsof': > mongod 14942 Dmitrii 5U IPv4 0xc36ad5231f84011d 0T0 TCP *: 27017 (LISTEN) E da' comando whatsmyurl': { "tu": "127.0 .0.1: 50294 "," ok ": 1} E non corrispondono. – dmi3y