web-dev-qa-db-de.com

So halten Sie mongoDB mit einem Befehl an

Ich muss in der Lage sein, MongoDB auf dem CLI zu starten/stoppen. Es ist ganz einfach zu beginnen:

./mongod

Um jedoch die Mongo-DB zu stoppen, muss ich zuerst die offene Mongo-Shell ausführen und dann zwei Befehle eingeben:

$ ./mongo

verwende admin

db.shutdownServer ()

Ich weiß also nicht, wie man die Mongo-DB in einer Zeile stoppt. Irgendeine Hilfe?

126
XiaoYao

Starten und Stoppen von MongoDB wird im MongoDB-Handbuch behandelt. Es werden die verschiedenen Optionen zum Anhalten von MongoDB durch Shell, CLI, Treiber usw. erläutert. Außerdem werden die Risiken des falschen Anhaltens von MongoDB (z. B. Datenbeschädigung) sowie die unterschiedlichen Kill-Signale erläutert.

Wenn Sie MongoDB mit einem Paketmanager für Ubuntu oder Debian installiert haben, können Sie mongodb (vorher mongod) außerdem wie folgt stoppen:

  • Upstart: Sudo service mongodb stop

  • Sysvinit: Sudo /etc/init.d/mongodb stop

Oder unter Mac OS X

Oder auf Red Hat basierten Systemen:

  • service mongod stop

Oder unter Windows wenn Sie einen Dienst namens MongoDB installiert haben:

  • net stop MongoDB

Wenn Sie nicht als Dienst installiert sind (ab Windows 7+), können Sie Folgendes ausführen:

  • taskkill /f /im mongod.exe

Um mehr über die Probleme eines unreinen Herunterfahrens zu erfahren, wie Sie ein solches Szenario am besten vermeiden und was im Falle eines unreinen Herunterfahrens zu tun ist, siehe: Daten nach einem unerwarteten Herunterfahren wiederherstellen .

181
Mark Hillick

Wenn Sie buchstäblich eine Zeile wünschen, die den Befehlen in Ihrer ursprünglichen Frage entspricht, können Sie einen Aliasnamen verwenden:

mongo --eval "db.getSiblingDB('admin').shutdownServer()"

Marks Antwort auf das Starten und Stoppen von MongoDB über Dienste ist der typischere (und empfohlene) Verwaltungsansatz.

91
Stennie

mongod --dbpath /path/to/your/db --shutdown

Weitere Informationen unter offiziell: http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/

39
francoisrv

Wenn der Server in einem Terminal als Vordergrundprozess ausgeführt wird, können Sie dies durch Drücken von tun

Ctrl-C

Eine andere Möglichkeit, einen laufenden Server sauber herunterzufahren, ist der Befehl shutdown.

> use admin
> db.shutdownServer();

Andernfalls kann ein Befehl wie kill verwendet werden, um das Signal zu senden. Wenn mongod als PID 10014 hat, lautet der Befehl 

kill -2 10014
25
Nanhe Kumar

Ich folgte der offiziellen MongoDB-Dokumentation , um mit Signalen zu stoppen. Einer der folgenden Befehle kann verwendet werden (PID stellt den Process ID des mongod-Prozesses dar): 

kill PID

welches das Signal 15 (SIGTERM) sendet oder

kill -2 PID

welches das Signal 2 (SIGINT) sendet.

Warnung aus MongoDB-Dokumentation :
Verwenden Sie niemals kill -9 (d. H. SIGKILL), um eine mongod-Instanz zu beenden.

Wenn Sie mehr als eine Instanz ausführen oder sich nicht für die PID interessieren, können Sie pkill verwenden, um das Signal an alle laufenden mongod-Prozesse zu senden:

pkill mongod

oder

pkill -2 mongod

oder, viel sicherer, nur zu den Prozessen, die zu Ihnen gehören:

pkill -U $USER mongod

oder

pkill -2 -U $USER mongod

PS
Hinweis: Ich habe auf diese Option zurückgegriffen, da mongod --shutdown zwar in der aktuellen MongoDB-Dokumentation erwähnt wird, aber auf meinem Computer seltsamerweise nicht funktioniert (macOS, mongodb v3.4.10, installiert mit homebrew)
Error parsing command line: unrecognised option '--shutdown' 

PPS
(macOS-spezifisch) Bevor sich jemand fragt: Nein, ich konnte es nicht mit dem Befehl stoppen
brew services stop mongodb
weil ich es nicht mit gestartet habe
brew services start mongodb.
Ich hatte mongod mit einer benutzerdefinierten Befehlszeile gestartet :-)

10
t0r0X

Verwenden Sie mongod --shutdown

Laut offiziellem Dokument: manage-mongodb-prozesse/

: D 

6
Shawn Wang

Ein Liner zum Starten oder Stoppen des Mongodb-Dienstes über die Befehlszeile;

  1. Um den Dienst zu starten, verwenden Sie: NET START MONGODB
  2. Um den Dienst zu stoppen, verwenden Sie: NET STOP MONGODB

Ich benutze das selbst, es funktioniert.

4
Pirira

erstellen Sie eine Datei mit dem Namen "mongostop.bat"

speichern Sie den folgenden Code darin 

 mongo admin --eval "db.shutdownServer()"

führen Sie die Datei mongostop.bat aus und Sie haben den Mongo erfolgreich beendet 

3

Von den gegebenen Befehlen halte ich Sie für Linux 

MongoDB starten:

$ Sudo service mongod start
mongod start/running, process XXXXX 

Überprüfe den Status:

$ Sudo service mongod status
mongod start/running, process XXXXX 

Stoppen Sie MongoDB:

$ Sudo service mongod stop
mongod stop/waiting 
2
ranafeb14

STRG + C

in der Windows-Befehlszeile

1
Vincent T.

drücken Sie im Terminalfenster auf Ihrem Mac Strg + c

1
Shyamal

Ich habe einfach getan:

quit();

Bitte beachte, dass ich mongo 3.0 verwende.

Mongo

1
Felipe Alarcon

Ich benutze dieses Startskript auf Ubuntu.

#!/bin/sh

### BEGIN INIT INFO
# Provides:     mongodb
# Required-Sart:
# Required-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description: mongodb
# Description: mongo db server
### END INIT INFO

. /lib/lsb/init-functions

PROGRAM=/opt/mongo/bin/mongod
MONGOPID=`ps -ef | grep 'mongod' | grep -v grep | awk '{print $2}'`

test -x $PROGRAM || exit 0

case "$1" in
  start)
     log_begin_msg "Starting MongoDB server"
         ulimit -v unlimited.
         ulimit -n 100000
     /opt/mongo/bin/mongod --fork --quiet --dbpath /data/db --bind_ip 127.0.0.1 --rest   --config /etc/mongod.conf.
     log_end_msg 0
     ;;
  stop)
     log_begin_msg "Stopping MongoDB server"
     if [ ! -z "$MONGOPID" ]; then
kill -15 $MONGOPID
     fi
     log_end_msg 0
     ;;
  status)
     ;;
  *)
     log_success_msg "Usage: /etc/init.d/mongodb {start|stop|status}"
     exit 1
esac

exit 0
0
Boris Ivanov

Windows

In PowerShell heißt es: Stop-Service MongoDB

Dann starten Sie es erneut: Start-Service MongoDB

Um zu überprüfen, ob es gestartet ist, führen Sie Folgendes aus: net start | findstr MongoDB.

Hinweis: Oben wird davon ausgegangen, dass MongoDB als Dienst registriert ist .

0
kenorb

Mein Spezialfall ist:

zuvor startete Mongod durch:

Sudo -u mongod mongod -f /etc/mongod.conf

jetzt möchten Sie mongod stoppen.

und beziehen offizielle doc Stop mongod Prozesse , hat versucht:

(1) shutdownServer aber fehlgeschlagen:

> use admin
switched to db admin
> db.shutdownServer()
2019-03-06T14:13:15.334+0800 E QUERY    [thread1] Error: shutdownServer failed: {
        "ok" : 0,
        "errmsg" : "shutdown must run from localhost when running db without auth",
        "code" : 13
} :
[email protected]/mongo/Shell/utils.js:25:13
[email protected]/mongo/Shell/db.js:302:1
@(Shell):1:1

(2) --shutdown ist immer noch fehlgeschlagen:

# mongod --shutdown
There doesn't seem to be a server running with dbpath: /data/db

(3) vorheriger Startbefehl, der --shutdown hinzufügt:

Sudo -u mongod mongod -f /etc/mongod.conf --shutdown
killing process with pid: 30213
failed to kill process: errno:1 Operation not permitted

(4) benutze service um zu stoppen:

service mongod stop

und

service mongod status

show expected Active: inactive (dead) but mongod actually still running, denn kann den Prozess von ps sehen:

# ps -edaf | grep mongo | grep -v grep
root     30213     1  0 Feb04 ?        03:33:22 mongod --port PORT --dbpath=/var/lib/mongo

und endlich , hör wirklich auf mongod durch:

# Sudo mongod -f /etc/mongod.conf --shutdown
killing process with pid: 30213

bisherige ursache: noch unbekannt ...

hoffnung über Lösung ist für Ihr nützlich.

0
crifan

Aufbauend auf der Antwort von stennie:

mongo --eval "db.getSiblingDB('admin').shutdownServer();quit()"

Ich stellte fest, dass der Mongo versuchte, sich nach dem Herunterfahren des Servers wieder mit der Datenbank zu verbinden, was zu Verzögerungen und Fehlermeldungen führen würde. Das Hinzufügen von quit () nach dem Herunterfahren beschleunigt und reduziert die Meldungen, aber es gibt immer noch eine. 

Ich möchte auch Kontext hinzufügen - ich starte und stoppe mongod als Teil von Testfällen für anderen Code, sodass die Registrierung als Dienst nicht in den Anwendungsfall passt. Ich hoffe, dass am Ende etwas läuft, das auf allen Plattformen läuft (dies wurde gerade in Windows getestet). Ich verwende Mongod 3.6.9

0
David Fridley