Jaki jest prosty sposób na zatrzymanie mongod w systemie Mac OS X?

85

Używam mongo 1.8.2 i próbuję sprawdzić, jak porządnie go zamknąć na komputerze Mac.

na naszych serwerach ubuntu mogę czysto zamknąć mongo z powłoki mongo za pomocą:

> use admin
> db.shutdownServer()

ale na moim Macu nie zabija procesu mongod. wyjście pokazuje, że 'powinno być' zamknięte, ale kiedy i ps -ef | grep mongo pokazuje mi aktywny proces. Ponadto nadal mogę otworzyć powłokę mongo i zapytać o moje bazy danych tak, jakby nigdy nie były zamknięte.

dane wyjściowe z mojej lokalnie db.shutdownServer () to:

MongoDB shell version: 1.8.2
connecting to: test
> use admin                  
switched to db admin
> db.shutdownServer()
Tue Dec 13 11:44:21 DBClientCursor::init call() failed
Tue Dec 13 11:44:21 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1
server should be down...
Tue Dec 13 11:44:21 trying reconnect to 127.0.0.1
Tue Dec 13 11:44:21 reconnect 127.0.0.1 failed couldn't connect to server 127.0.0.1
Tue Dec 13 11:44:21 Error: error doing query: unknown shell/collection.js:150

Wiem, że mogę po prostu zabić ten proces, ale chciałbym to zrobić dokładniej.

emilebaizel
źródło
Jak zacząłeś mongod? Tylko na muszli? Używasz launchctl?
dcrosta
Czy masz jakieś informacje z logów? Możliwe, że MongoDB „automatycznie restartuje się”. Możesz chcieć uruchomić --logappend, chociaż zupełnie nowy plik dziennika jest wyraźną wskazówką, że proces został uruchomiony ponownie.
Gates VP

Odpowiedzi:

172

Prawdopodobnie dlatego, że launchctl zarządza Twoją instancją mongod. Jeśli chcesz uruchomić i zamknąć instancję mongod, najpierw ją wyładuj:

launchctl unload -w ~/Library/LaunchAgents/org.mongodb.mongod.plist

Następnie uruchom mongod ręcznie:

mongod -f path/to/mongod.conf --fork

Możesz znaleźć swoją lokalizację mongod.conf pod adresem ~/Library/LaunchAgents/org.mongodb.mongod.plist.

Po tym db.shutdownServer()będzie działać dobrze.

Dodano 22 lutego 2014:

Jeśli zainstalowałeś mongodb przez homebrew, homebrew faktycznie ma przydatne brew servicespolecenie. Aby wyświetlić aktualnie uruchomione usługi:

brew services list

Aby uruchomić mongodb:

brew services start mongodb

Aby zatrzymać mongodb, jeśli już działa:

brew services stop mongodb

Aktualizacja

Jak edufinn podkreślono w komentarzu, brew servicesjest teraz dostępny jako polecenia zdefiniowane przez użytkownika i mogą być instalowane z następującego polecenia: brew tap gapple/services.

James Chen
źródło
23
Jeśli ktoś jest zainteresowany, jeśli zainstalowałeś mongodb przez homebrew, musisz zrobić, launchctl stop homebrew.mxcl.mongodbaby zatrzymać mongodb.
Tyler Brock,
3
We wrześniu 2014 r. Pojawiło się powiadomienie o wycofaniu w brewodniesieniu do brew services:$ brew services Warning: brew services is unsupported and will be removed soon.
Pablo Navarro
3
W grudniu 2014 r. brew servicesZostał usunięty. $ brew services Error: Unknown command: services
przytula
6
brew servicesjest teraz dostępny jako polecenia zdefiniowane przez użytkownika i mogą być instalowane z następującego polecenia: brew tap gapple/services.
edufinn
1
Po uruchomieniu usługi mongodb mój serwer węzłowy nie może się z nią połączyć. Jeśli jednak uruchomię mongodb z wiersza poleceń, działa dobrze. Myślę, że to musi być problem z portem .. Jak ustawić port podczas uruchamiania usługi?
pravin
35

Jeśli zainstalowałeś mongodb z homebrew, jest łatwiejszy sposób:

Wyświetl zadanie mongo za pomocą launchctl:

launchctl list | grep mongo

Zatrzymaj pracę mongo:

launchctl stop <job label>

(Dla mnie to jest launchctl stop homebrew.mxcl.mongodb)

Rozpocznij pracę mongo:

launchctl start <job label>
Raphael
źródło
24

Prostym sposobem jest pobranie identyfikatora procesu mongodb i zabicie go. Uwaga: NIE UŻYWAJ do tego celu kill -9 pid, ponieważ może to spowodować uszkodzenie bazy danych.

więc 1. pobierz pid z mongodb

$ pgrep mongo

dostaniesz pid mongo, teraz

$ kill

Możesz również użyć kill -15

Sanchit Singhania
źródło
8

Jeśli zainstalowałeś serwer społecznościowy mongodb przez homebrew, możesz zrobić:

brew services list

Spowoduje to wyświetlenie bieżących usług, jak poniżej:

Name              Status  User          Plist
mongodb-community started thehaystacker /Users/thehaystacker/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist

redis             stopped

Następnie możesz ponownie uruchomić mongodb, najpierw zatrzymując i ponownie uruchamiając:

brew services stop mongodb
brew services start mongodb
the_haystacker
źródło
4

Wolę zatrzymać serwer MongoDB za pomocą samego portpolecenia.

sudo port unload mongodb

I zacząć od nowa.

sudo port load mongodb
Rafa
źródło
3

Sprawdź te dokumenty:

http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo#StartingandStoppingMongo-SendingaUnixINTorTERMsignal

Jeśli uruchomiłeś go w terminalu, powinieneś być w porządku z ctrl + 'c'- to zrobi czyste zamknięcie.

Jeśli jednak używasz launchctl, istnieją szczegółowe instrukcje, które będą się różnić w zależności od tego, jak został zainstalowany.

Jeśli używasz Homebrew, byłoby to launchctl stop homebrew.mxcl.mongodb

Tyler Brock
źródło
1

To stare pytanie, ale je również znalazłem podczas wyszukiwania.

Jeśli zainstalowałeś z, brewrozwiązanie byłoby faktycznie takie:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

Alexander Swensen
źródło
0

Jeśli usługa działa przez brew, możesz ją zatrzymać za pomocą następującego polecenia:

brew services stop mongodb
KayV
źródło
0

Rozwiązania dostarczane przez innych kiedyś działały u mnie, ale już u mnie nie działają, co jest jak poniżej.

brew services stop mongodb
brew services start mongodb

brew services list daje

Name              Status  User      Plist
mongodb-community started XXXXXXXXX /Users/XXXXXXXXX/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist

Więc użyłem mongodb-communityzamiast tego, mongodbktóry działał dla mnie

brew services stop mongodb-community
brew services start mongodb-community
Arnold Parge
źródło