Je dois pouvoir démarrer/arrêter MongoDB sur le CLI. C'est assez simple pour commencer:
./mongod
Mais pour arrêter mongo DB, je dois d'abord ouvrir mongo Shell ouvert, puis taper deux commandes:
$ ./mongo
utiliser admin
db.shutdownServer ()
Donc, je ne sais pas comment arrêter Mongo DB en une seule ligne. De l'aide?
Démarrage et arrêt de MongoDB est traité dans le manuel MongoDB. Il explique les différentes options permettant d’arrêter MongoDB via Shell, cli, les pilotes, etc. Il détaille également les risques d’arrêt incorrect de MongoDB (tel que la corruption de données) et décrit les différents signaux d’abattage.
De plus, si vous avez installé MongoDB avec un gestionnaire de paquets pour Ubuntu ou Debian , vous pouvez arrêter mongodb (anciennement mongod) comme suit:
Upstart: Sudo service mongodb stop
Sysvinit: Sudo /etc/init.d/mongodb stop
Ou sur Mac OS X
Trouvez le PID du processus mongod en utilisant $ top
Tuez le processus par $ kill <PID>
( les documents Mongo ont plus d’informations à ce sujet )
Ou sur Systèmes Red Hat based:
service mongod stop
Ou sur Windows si vous avez installé un service nommé MongoDB
:
net stop MongoDB
Et s'il n'est pas installé en tant que service (à partir de Windows 7+), vous pouvez exécuter:
taskkill /f /im mongod.exe
Pour en savoir plus sur les problèmes d’un arrêt impropre, sur la meilleure façon d’éviter un tel scénario et sur les mesures à prendre en cas d’arrêt impropre, veuillez consulter: Récupérer des données après un arrêt inattendu .
Si vous voulez littéralement un équivalent d'une ligne aux commandes de votre question initiale, vous pouvez également créer un alias:
mongo --eval "db.getSiblingDB('admin').shutdownServer()"
La réponse de Mark au démarrage et à l'arrêt de MongoDB via des services est l'approche administrative la plus typique (et la plus recommandée).
mongod --dbpath /path/to/your/db --shutdown
Plus d'infos sur official: http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/
Si le serveur est exécuté en tant que processus d’avant-plan dans un terminal, vous pouvez le faire en appuyant sur
Ctrl-C
Une autre façon d’arrêter proprement un serveur en cours d’exécution consiste à utiliser la commande shutdown,
> use admin
> db.shutdownServer();
Sinon, une commande telle que kill peut être utilisée pour envoyer le signal. Si Mongod a 10014 comme PID, la commande serait
kill -2 10014
J'ai suivi la documentation de MongoDB officielle pour m'arrêter avec des signaux. L'une des commandes suivantes peut être utilisée (PID représente le Process ID
du processus mongod
):
kill PID
qui envoie le signal 15 (SIGTERM), ou
kill -2 PID
qui envoie le signal 2 (SIGINT).
Warning from documentation MongoDB :
N'utilisez jamaiskill -9
(c'est-à-dire SIGKILL) pour mettre fin à une instancemongod
.
Si vous avez plus d'une instance en cours d'exécution ou si vous vous moquez du PID, vous pouvez utiliser pkill
pour envoyer le signal à tous les processus mongod
en cours d'exécution:
pkill mongod
ou
pkill -2 mongod
ou, bien plus sûr, uniquement aux processus qui vous appartiennent:
pkill -U $USER mongod
ou
pkill -2 -U $USER mongod
PS
Remarque: j’ai eu recours à cette option car mongod --shutdown
, bien que mentionné dans la documentation actuelle de { documentation MongoDB }, ne fonctionne curieusement pas sur ma machine (macOS, mongodb v3.4.10, installé avec homebrew
):Error parsing command line: unrecognised option '--shutdown'
PPS
(spécifique à macOS) Avant que quiconque ne se demande: non, je ne pouvais pas l'arrêter avec une commandebrew services stop mongodb
parce que je ne l'ai pas commencé avecbrew services start mongodb
.
J'avais commencé mongod
avec une ligne de commande personnalisée :-)
Un liners pour démarrer ou arrêter le service mongodb en ligne de commande;
NET START MONGODB
NET STOP MONGODB
Je l'utilise moi-même, ça marche.
créer un fichier appelé mongostop.bat
enregistrer le code suivant dedans
mongo admin --eval "db.shutdownServer()"
lancez le fichier mongostop.bat et vous avez réussi à arrêter mongo
D'après les commandes données, je pense que vous êtes sous Linux.
Démarrez MongoDB:
$ Sudo service mongod start
mongod start/running, process XXXXX
Vérifier l'état:
$ Sudo service mongod status
mongod start/running, process XXXXX
Stop MongoDB:
$ Sudo service mongod stop
mongod stop/waiting
CTRL + C
sur la ligne de commande de Windows
dans la fenêtre du terminal sur votre mac, appuyez sur control + c
J'utilise ce script de démarrage sur 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
Dans PowerShell, c'est: Stop-Service MongoDB
Ensuite, pour le redémarrer: Start-Service MongoDB
Pour vérifier si cela a été démarré, lancez: net start | findstr MongoDB
.
Remarque: ci-dessus suppose que MongoDB est enregistré en tant que service .
Mon cas particulier est:
commencez précédemment mongod par:
Sudo -u mongod mongod -f /etc/mongod.conf
maintenant, je veux arrêter mongod
.
et référez-vous au document officiel Stop mongod Processes , a essayé:
(1) shutdownServer
mais échoué:
> 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
} :
_getErrorWithCode@src/mongo/Shell/utils.js:25:13
DB.prototype.shutdownServer@src/mongo/Shell/db.js:302:1
@(Shell):1:1
(2) --shutdown
a encore échoué:
# mongod --shutdown
There doesn't seem to be a server running with dbpath: /data/db
(3) commande de démarrage précédente ajoutant --shutdown:
Sudo -u mongod mongod -f /etc/mongod.conf --shutdown
killing process with pid: 30213
failed to kill process: errno:1 Operation not permitted
(4) utilisez service
pour arrêter:
service mongod stop
et
service mongod status
affiche Active: inactive (dead)
attendu mais mongod
réellement toujours en cours d’exécution, car peut voir le processus de ps:
# ps -edaf | grep mongo | grep -v grep
root 30213 1 0 Feb04 ? 03:33:22 mongod --port PORT --dbpath=/var/lib/mongo
et enfin , vraiment arrêter Mongod par:
# Sudo mongod -f /etc/mongod.conf --shutdown
killing process with pid: 30213
jusqu'à maintenant, cause fondamentale: toujours inconnue ...
espérons que la solution ci-dessus est utile pour votre.
S'appuyant sur la réponse de Stennie:
mongo --eval "db.getSiblingDB('admin').shutdownServer();quit()"
J'ai trouvé que Mongo essayait de se reconnecter à la base de données après la fermeture du serveur, ce qui causerait un délai et des messages d'erreur. Ajouter quit () après l’arrêt l’accélère et réduit le nombre de messages, mais il en reste un.
Je souhaite également ajouter un contexte - je commence et arrête mongod dans le cadre de scénarios de test pour un autre code, de sorte que l'enregistrement en tant que service ne convient pas au cas d'utilisation. J'espère finir avec quelque chose qui fonctionne sur toutes les plateformes (ceci est testé dans Windows en ce moment). J'utilise Mongod 3.6.9