Mongodb è in esecuzione?


117

Ho installato mongodb e i driver php sul mio server unix.

La mia domanda è: come posso sapere se mongodb è in esecuzione? Esiste una semplice query sulla riga di comando per verificare lo stato? Se lo avvio una volta dalla shell, continuerà a funzionare anche se esco dalla shell (non sembra essere così). Come posso rendere la connessione mongodb persistente e l'avvio automatico al riavvio del server?

Posso correre:

-bash-3.2 $ su
Password:
[root @ xxx] # cd / var / lib
[root @ xxx] # ./mongodb-linux-i686-1.6.5/bin/mongod
./mongodb-linux-i686-1.6. 5 / bin / mongod --help per aiuto e opzioni di avvio
mercoledì 23 febbraio 08:06:54 Avvio di MongoDB: pid = 7271 port = 27017 dbpath = / data / db / 32-bit

** NOTA: quando si utilizza MongoDB a 32 bit, si è limitati a circa 2 gigabyte di dati
** vedere http://blog.mongodb.org/post/137788967/32-bit-limitations

** ATTENZIONE: stai utilizzando OpenVZ. Questo è noto per essere rotto !!!

Mercoledì 23 febbraio 08:06:54 versione db v1.6.5, versione pdfile 4.5
Mer 23 febbraio 08:06:54 versione git: 0eb017e9b2828155a67c5612183337b89e12e291
mercoledì 23 febbraio 08:06:54 sys info: Linux domU-12-31-39-01 -70-B4 2.6.21.7-2.fc8xen # 1 SMP ven
15 feb 12:39:36 EST 2008 i686 BOOST_LIB_VERSION = 1_37
mercoledì 23 febbraio 08:06:54 [initandlisten] in attesa di connessioni sulla porta 27017
mercoledì 23 febbraio 08: 06:54 [websvr] interfaccia di amministrazione web in ascolto sulla porta 28017

Se apro una shell separata, posso quindi connettermi a mongodb:

-bash-3.2 $ cd / var / lib
-bash-3.2 $ ./mongodb-linux-i686-1.6.5/bin/mongo
Versione shell MongoDB: 1.6.5
connessione a: test
db.foo.find ()
{" _id ": ObjectId (" 4d63d7d3eb95985ab19c8feb ")," a ": 1}

Tuttavia se chiudo la shell iniziale non riesco a connettermi:

-bash-3.2 $ cd / var / lib
-bash-3.2 $ ./mongodb-linux-i686-1.6.5/bin/mongo
Versione shell MongoDB: 1.6.5
connessione a: test
mercoledì 23 febbraio 08:25:10 Errore : impossibile connettersi al server 127.0.0.1 (anon): 1154
eccezione: connessione non riuscita

Risposte:


144

verifica con:

   ps -edaf | grep mongo | grep -v grep  # "ps" flags may differ on your OS

o

   /etc/init.d/mongodb status     # for MongoDB version < 2.6

   /etc/init.d/mongod status      # for MongoDB version >= 2.6

o

   service mongod status

per vedere se mongod è in esecuzione (devi essere root per farlo, o anteporre a tutto sudo). Tieni presente che anche il comando "grep" verrà sempre visualizzato come processo separato.

controllare il file di registro /var/log/mongo/mongo.log per vedere se sono stati segnalati problemi


20
dovrebbe essere: stato del servizio
mongodb

12
Puoi anche fare un file pgrep mongo.
slm

1
Ho ricevuto questo: 501 5365 418 0 4:10 pm ttys000 0: 00.00 grep mongo, significa che è in esecuzione?
L1ghtk3ira

1
Lo stato del servizio mongod non ha funzionato per me, ma lo stato del servizio mongodb funziona.
viks

5
da mongo 2.6 il servizio è mongod prima del mongodb, confuso sì
tsukimi

40

Io trovo:

ps -ax | grep mongo

Per essere molto più coerente. Il valore restituito può essere utilizzato per rilevare quante istanze di mongod sono in esecuzione


6
Inoltre, potresti prendere in considerazione l'aggiunta di un filtro per non restituire il processo grep che stai eseguendo. Quindi: ps -ax | grep -v grep | grep mongo
DCaugs

34

Per verificare rapidamente se mongodb è in esecuzione, questo rapido trucco di nc te lo farà sapere.

nc -zvv localhost 27017

Il comando precedente presuppone che lo si stia eseguendo sulla porta predefinita su localhost.

Per l'avvio automatico, potresti voler guardare questo thread .


1
Sì, funziona solo controllando se qualcosa sta ascoltando la porta. In tal caso, l'output conterrà 27017 open, oppure Connection refused.
Alexander


9

Per controllare lo stato corrente di esecuzione di mongodb utilizzare: sudo service mongodb status


8

Corretto, la chiusura della shell interromperà MongoDB. Prova a utilizzare la --forkriga di comando arg per il processo mongod che invece lo fa funzionare come demone. Non sono un guru di Unix, ma sono sicuro che ci deve essere un modo per farlo partire automaticamente all'avvio della macchina.

per esempio

mongod --fork --logpath /var/log/mongodb.log --logappend

Consulta la documentazione completa sull'avvio e l'arresto di Mongo .


Grazie. Ho [root@xxx lib]# ./mongodb-linux-i686-1.6.5/bin/mongod --fork --logpath /var/log/m ongodb.log --logappend all output going to: /var/log/mongodb.log forked process: 7518Connect failed

hmm, funziona per me (Ubuntu VM a 64 bit, Mongo v1.7.6), quindi non sono sicuro del motivo per cui non è per te tbh. Se non riesci a farlo funzionare, la soluzione migliore potrebbe essere quella di pubblicarlo sui forum di
mongodb

Ma ho iniziato con &e ora non riesco a trovare il processid.
bobobobo

@bobobobo - come stai cercando di trovare l'ID del processo?
Tass

ps -e | grep mongod
bobobobo

3

Puoi usare il comando seguente per controllare lo stato di MongoDB, ad esempio: sudo service MongoDB statusche mostra lo stato del servizio MongoDB come nello screenshot:

Stato MongoDB


2

Probabilmente perché non ho chiuso correttamente il mio server di sviluppo o per un motivo simile. Per risolverlo, rimuovere il blocco e avviare il server con: sudo rm /var/lib/mongodb/mongod.lock ; sudo start mongodb


1

So che questo è per php, ma sono arrivato qui alla ricerca di una soluzione per node. Utilizzando mongoskin:

mongodb.admin().ping(function(err) {
    if(err === null)
        // true - you got a conntion, congratulations
    else if(err.message.indexOf('failed to connect') !== -1)
        // false - database isn't around
    else
        // actual error, do something about it
})

Con altri driver, puoi provare a stabilire una connessione e se fallisce, sai che il server mongo è inattivo. Mongoskin deve effettivamente fare qualche chiamata (come ping) perché si connette pigramente. Per php, puoi usare il metodo try-to-connect. Crea uno script!

PHP:

$dbIsRunning = true
try {
  $m = new MongoClient('localhost:27017');
} catch($e) {
  $dbIsRunning = false
}
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.