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?
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
Finden Sie die PID des Mongod-Prozesses mit $ top
Beenden Sie den Vorgang mit $ kill <PID>
( die Mongo-Dokumente haben mehr Informationen dazu )
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 .
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.
mongod --dbpath /path/to/your/db --shutdown
Weitere Informationen unter offiziell: http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/
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
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 niemalskill -9
(d. H. SIGKILL), um einemongod
-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 stoppenbrew services stop mongodb
weil ich es nicht mit gestartet habebrew services start mongodb
.
Ich hatte mongod
mit einer benutzerdefinierten Befehlszeile gestartet :-)
Ein Liner zum Starten oder Stoppen des Mongodb-Dienstes über die Befehlszeile;
NET START MONGODB
NET STOP MONGODB
Ich benutze das selbst, es funktioniert.
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
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
STRG + C
in der Windows-Befehlszeile
drücken Sie im Terminalfenster auf Ihrem Mac Strg + c
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
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 .
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.
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