Czy Mongodb działa?

117

Zainstalowałem mongodb i sterowniki php na moim serwerze unix.

Moje pytanie brzmi: jak mogę sprawdzić, czy mongodb działa? Czy istnieje proste zapytanie w wierszu poleceń, aby sprawdzić stan? Jeśli uruchomię go raz z powłoki, czy będzie działać, jeśli wyjdę z powłoki (nie wydaje się, aby tak było). Jak ustawić trwałe połączenie mongodb i automatycznie uruchamiać się po ponownym uruchomieniu serwera?

Mogę biec:

-bash-3.2 $ su
Hasło:
[root @ xxx] # cd / var / lib
[root @ xxx] # ./mongodb-linux-i686-1.6.5/bin/mongod
./mongodb-linux-i686-1.6. 5 / bin / mongod --help, aby uzyskać pomoc i opcje uruchamiania
Wed 23 lutego 08:06:54 Początek bazy danych MongoDB: pid = 7271 port = 27017 dbpath = / data / db / 32-bit

** UWAGA: podczas korzystania z 32-bitowej bazy MongoDB masz ograniczenie do około 2 gigabajtów danych
** patrz http://blog.mongodb.org/post/137788967/32-bit-limitations

** OSTRZEŻENIE: korzystasz z OpenVZ. Wiadomo, że jest zepsuty !!!

Środa 23 lutego 08:06:54 wersja db v1.6.5, wersja pdfile 4.5
środa 23 lutego 08:06:54 wersja git: 0eb017e9b2828155a67c5612183337b89e12e291
środa 23 lutego 08:06:54 informacje o systemie: Linux domU-12-31-39-01 -70-B4 2.6.21.7-2.fc8xen # 1 SMP pt
15 lutego 12:39:36 EST 2008 i686 BOOST_LIB_VERSION = 1_37
środa 23 lutego 08:06:54 [initandlisten] oczekiwanie na połączenia na porcie 27017
środa 23 lutego 08: 06:54 [websvr] interfejs administratora sieci nasłuchujący na porcie 28017

Jeśli otworzę oddzielną powłokę, mogę wtedy połączyć się z mongodb:

-bash-3.2 $ cd / var / lib
-bash-3.2 $ ./mongodb-linux-i686-1.6.5/bin/mongo
Wersja powłoki MongoDB: 1.6.5
połączenie z: test
db.foo.find ()
{" _id ": ObjectId (" 4d63d7d3eb95985ab19c8feb ")," a ": 1}

Jeśli jednak zamknę początkową powłokę, nie mogę się połączyć:

-bash-3.2 $ cd / var / lib
-bash-3.2 $ ./mongodb-linux-i686-1.6.5/bin/mongo
Wersja powłoki MongoDB: 1.6.5
łączenie z: test
środa 23 lutego 08:25:10 Błąd : nie można połączyć się z serwerem 127.0.0.1 (anon): 1154
wyjątek: połączenie nie powiodło się

Społeczność
źródło

Odpowiedzi:

144

sprawdź w:

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

lub

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

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

lub

   service mongod status

aby sprawdzić, czy mongod działa (musisz być rootem, aby to zrobić, lub poprzedzić wszystko znakiem sudo). Zwróć uwagę, że polecenie „grep” zawsze pojawia się również jako oddzielny proces.

sprawdź plik dziennika /var/log/mongo/mongo.log, aby zobaczyć, czy są jakieś zgłoszone problemy

Tilo
źródło
20
powinno być: status mongodb usługi
MhdSyrwan
12
Możesz także zrobić pgrep mongo.
slm
1
Mam to: 501 5365 418 0 16:10 ttys000 0: 00.00 grep mongo, czy to znaczy, że działa?
L1ghtk3ira
1
status usługi mongodb nie działał dla mnie, ale status mongodb usługi działa.
viks
5
od mongo 2.6 usługa jest mongod wcześniej jego mongodb, mylące tak
tsukimi
40

Znajduję:

ps -ax | grep mongo

Aby być dużo bardziej konsekwentnym. Zwracana wartość może być użyta do wykrycia, ile jest uruchomionych instancji mongod

Mark Gia Bao Nguyen
źródło
6
Możesz również rozważyć dodanie filtru, aby nie zwracać uruchomionego procesu grep. A więc: ps -ax | grep -v grep | grep mongo
DCaugs,
34

Aby szybko sprawdzić, czy mongodb działa, ta szybka sztuczka nc da ci znać.

nc -zvv localhost 27017

Powyższe polecenie zakłada, że ​​uruchamiasz go na domyślnym porcie na hoście lokalnym.

Aby rozpocząć automatyczne uruchamianie, możesz spojrzeć na ten wątek .

PiyushW
źródło
1
Tak, to działa, jeśli tylko sprawdzasz, czy coś nasłuchuje portu. W takim przypadku dane wyjściowe będą zawierać 27017 openlub w przeciwnym razie Connection refused.
Alexander
12

to powinno działać dobrze ...

pgrep mongod

Vinu Joseph
źródło
9

Aby sprawdzić aktualny status działania mongodb, użyj: sudo service mongodb status

magma
źródło
8

Prawidłowo, zamknięcie powłoki zatrzyma MongoDB. Spróbuj użyć --forkargumentu wiersza poleceń dla procesu mongod, co spowoduje, że będzie działał jako demon. Nie jestem guru od Uniksa, ale jestem pewien, że musi istnieć sposób, aby automatycznie uruchomić go po uruchomieniu komputera.

na przykład

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

Zapoznaj się z pełną dokumentacją dotyczącą uruchamiania i zatrzymywania Mongo .

AdaTheDev
źródło
Dzięki. Mam to: [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: 7518ale nadal, gdy zamykam powłokę i otwieram nową, otrzymujęConnect failed
hmm, działa u mnie (Ubuntu 64bit VM, Mongo v1.7.6), więc nie jestem pewien, dlaczego to nie jest dla ciebie tbh. Jeśli nie możesz sprawić, by to działało, najlepszym rozwiązaniem może być opublikowanie go na forach mongodb: groups.google.com/group/mongodb-user
AdaTheDev
Ale zacząłem od &, a teraz nie mogę znaleźć procesida.
bobobobo
@bobobobo - jak próbujesz znaleźć identyfikator procesu?
Tass
ps -e | grep mongod
bobobobo
3

Możesz użyć poniższego polecenia, aby sprawdzić status MongoDB, np .: sudo service MongoDB statusktóry wyświetla stan usługi MongoDB jak na zrzucie ekranu:

Stan bazy danych MongoDB

Suneth
źródło
2

Prawdopodobnie dlatego, że nie zamknąłem poprawnie mojego serwera deweloperskiego lub z podobnego powodu. Aby to naprawić, zdejmij blokadę i uruchom serwer za pomocą: sudo rm /var/lib/mongodb/mongod.lock ; sudo start mongodb

G Kiran Kumar Reddy
źródło
1

Wiem, że to jest dla php, ale tutaj szukałem rozwiązania dla węzła. Korzystanie z 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
})

W przypadku innych sterowników możesz spróbować nawiązać połączenie, a jeśli się nie powiedzie, wiesz, że serwer mongo nie działa. Mongoskin musi faktycznie wykonać jakieś połączenie (np. Ping), ponieważ łączy się leniwie. W przypadku php możesz użyć metody próby połączenia. Zrób scenariusz!

PHP:

$dbIsRunning = true
try {
  $m = new MongoClient('localhost:27017');
} catch($e) {
  $dbIsRunning = false
}
BT
źródło