come posso vedere su quali porte mongo è in ascolto da mongo shell?


99

Se ho un'istanza di mongo in esecuzione, come posso controllare su quali numeri di porta è in ascolto dalla shell? Ho pensato che lo db.serverStatus()avrebbe fatto ma non lo vedo. lo vedo

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

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


Hai bisogno di mongo shell? O la normale shell unix andrà bene? :)
Sergio Tulentsev

@SergioTulentsev Mi chiedo specificatamente se questo sia possibile all'interno di mongo shell - poiché ho già trovato informazioni che sono vicine.
jcollum

Risposte:


72

Dalla shell di sistema puoi usare lsof(vedi la risposta di Derick sotto) o netstat -anper vedere cosa sta effettivamente facendo un processo. Tuttavia, supponendo che tu abbia accesso solo alla mongoshell (che implica il titolo della tua domanda), puoi eseguire il serverCmdLineOpts()comando. Quell'output ti fornirà tutti gli argomenti passati sulla riga di comando (argv) e quelli dal file di configurazione (analizzato) e potrai dedurre che le porte mongodsono in ascolto in base a tali 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 passato opzioni di porta specifiche come quelle sopra, allora mongodsarà in ascolto su 27017 e 28017 ( console http ) per impostazione predefinita. Nota: ci sono un paio di altri argomenti che possono alterare le porte senza essere espliciti, vedi qui:

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


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

5
giusto - se non è affatto specificato (e nel tuo caso sembra così), allora tutto è predefinito, il che ti mette su 27017
Adam Comerford,

220

Puoi farlo dalla shell del sistema operativo eseguendo:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo

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

35

Prova questo:

db.runCommand({whatsmyuri : 1})

Verrà visualizzato sia l'indirizzo IP che il numero di porta.


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

1
@jcollum versione 3.0 ha questa nuova funzionalità.
Ganu

6
Questo sembra mostrare la porta della shell o qualcosa del genere ... Output da lsof:> mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP *: 27017 (LISTEN) E dal whatsmyurlcomando: {"you": "127.0.0.1:50294", "ok": 1 } E non corrispondono.
dmi3y

12

MongoDB ascolta solo su una porta per impostazione predefinita (27017). Se l' --restinterfaccia è attiva, sarà aperta anche la porta 28017 (27017 + 1000) per la gestione delle richieste web di dettagli.

MongoDB supporta un getParametercomando, ma funziona solo se sei già connesso al Database (a quel punto conosci 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 connettermi. Va bene?
jcollum

2

Prova il comando seguito, questo funziona per me:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.