Was ist ein sauberer Weg, um Mongod unter Mac OS X zu stoppen?

84

Ich verwende Mongo 1.8.2 und versuche zu sehen, wie ich es auf dem Mac sauber herunterfahren kann.

Auf unseren Ubuntu-Servern kann ich Mongo sauber von der Mongo-Shell herunterfahren mit:

> use admin
> db.shutdownServer()

aber auf meinem Mac wird der Mongod-Prozess nicht beendet. Die Ausgabe zeigt, dass es heruntergefahren werden sollte, aber wenn ich ps -ef | grep mongo es zeigt mir einen aktiven prozess. Außerdem kann ich immer noch eine Mongo-Shell öffnen und meine Datenbank abfragen, als wäre sie nie heruntergefahren worden.

Die Ausgabe von meinem db.shutdownServer () lokal ist:

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

Ich weiß, dass ich den Prozess einfach beenden kann, aber ich würde es gerne sauberer machen.

Emilebaizel
quelle
Wie hast du angefangen mongod? Nur an der Muschel? Verwenden launchctl?
dcrosta
Haben Sie Informationen aus den Protokollen? Es könnte sein, dass MongoDB "automatisch neu startet". Möglicherweise möchten Sie mit ausführen --logappend, obwohl eine brandneue Protokolldatei ein klares Indiz dafür ist, dass der Prozess neu gestartet wurde.
Gates VP

Antworten:

170

Dies liegt wahrscheinlich daran, dass launchctl Ihre Mongod-Instanz verwaltet. Wenn Sie die mongod-Instanz starten und herunterfahren möchten, entladen Sie diese zuerst:

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

Dann starten Sie mongod manuell:

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

Sie finden Ihren Standort auf mongod.conf unter ~/Library/LaunchAgents/org.mongodb.mongod.plist.

Danach db.shutdownServer()würde gut funktionieren.

Hinzugefügt am 22. Februar 2014:

Wenn Sie Mongodb über Homebrew installiert haben, hat Homebrew tatsächlich einen praktischen brew servicesBefehl. So zeigen Sie aktuelle laufende Dienste an:

brew services list

So starten Sie mongodb:

brew services start mongodb

So stoppen Sie mongodb, wenn es bereits ausgeführt wird:

brew services stop mongodb

Aktualisieren

Wie edufinn im Kommentar ausgeführt hat, brew servicesist es jetzt als benutzerdefinierter Befehl verfügbar und kann mit folgendem Befehl installiert werden : brew tap gapple/services.

James Chen
quelle
23
Falls jemand interessiert ist, wenn Sie Mongodb über Homebrew installiert haben, müssten Sie tatsächlich tun launchctl stop homebrew.mxcl.mongodb, um Mongodb zu stoppen.
Tyler Brock
3
Als September 2014 gibt es eine Verfallserklärung in brewBezug auf brew services:$ brew services Warning: brew services is unsupported and will be removed soon.
Pablo Navarro
3
Stand Dezember 2014 brew serviceswurde entfernt. $ brew services Error: Unknown command: services
Hughes
6
brew servicesist jetzt als benutzerdefinierter Befehl verfügbar und kann mit folgendem Befehl installiert werden : brew tap gapple/services.
Edufinn
1
Nachdem ich den Mongodb-Dienst gestartet habe, kann mein Knotenserver keine Verbindung herstellen. Wenn ich den Mongodb jedoch über die Befehlszeile starte, funktioniert er einwandfrei. Ich denke, es muss ein Portproblem sein. Wie wird der Port beim Starten des Dienstes eingestellt?
Pravin
34

Wenn Sie mongodb mit homebrew installiert haben, gibt es einen einfacheren Weg:

Liste Mongo Job mit launchctl:

launchctl list | grep mongo

Stoppen Sie Mongo Job:

launchctl stop <job label>

(Für mich ist das launchctl stop homebrew.mxcl.mongodb)

Mongo Job starten:

launchctl start <job label>
Raphael
quelle
24

Ein einfacher Weg ist, die Prozess-ID von Mongodb zu erhalten und sie zu töten. Bitte beachten Sie, dass Sie hierfür NICHT kill -9 pid verwenden, da dies die Datenbank beschädigen kann.

Also, 1. Holen Sie sich die PID von Mongodb

$ pgrep mongo

Du wirst jetzt Mongo bekommen

$ töten

Sie können auch kill -15 verwenden

Sanchit Singhania
quelle
7

Wenn Sie den Mongodb Community Server über Homebrew installiert haben, können Sie Folgendes tun:

brew services list

Dadurch werden die aktuellen Dienste wie folgt aufgelistet:

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

redis             stopped

Dann können Sie mongodb neu starten, indem Sie zuerst anhalten und neu starten:

brew services stop mongodb
brew services start mongodb
the_haystacker
quelle
4

Ich ziehe es vor, den MongoDB-Server mit dem portBefehl selbst zu stoppen .

sudo port unload mongodb

Und um es erneut zu starten.

sudo port load mongodb
Rafa
quelle
3

Schauen Sie sich diese Dokumente an:

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

Wenn Sie es in einem Terminal gestartet haben, sollten Sie mit a einverstanden sein ctrl + 'c'- dies führt zu einem sauberen Herunterfahren.

Wenn Sie jedoch launchctl verwenden, gibt es spezielle Anweisungen dafür, die je nach Installation variieren.

Wenn Sie Homebrew verwenden, wäre es launchctl stop homebrew.mxcl.mongodb

Tyler Brock
quelle
1

Dies ist eine alte Frage, die ich aber auch bei der Suche gefunden habe.

Wenn Sie mit brewdann installiert haben, wäre die Lösung tatsächlich die folgende:

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

Alexander Swensen
quelle
0

Wenn der Dienst über Brew ausgeführt wird, können Sie ihn mit dem folgenden Befehl beenden:

brew services stop mongodb
KayV
quelle