Comment arrêter Mongo DB en une seule commande


159

J'ai besoin de pouvoir démarrer / arrêter MongoDB sur le cli. Il est assez simple de commencer:

./mongod

Mais pour arrêter mongo DB, je dois d'abord lancer le shell mongo 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?

Réponses:


226

Le démarrage et l'arrêt de MongoDB sont traités dans le manuel MongoDB. Il explique les différentes options pour arrêter MongoDB via le shell, le cli, les pilotes, etc.

De plus, si vous avez installé MongoDB à l'aide d'un gestionnaire de paquets pour Ubuntu ou Debian, vous pouvez arrêter mongodb (actuellement mongod dans ubuntu) comme suit:

  • Parvenu: sudo service mongod stop

  • Sysvinit: sudo /etc/init.d/mongod stop

Ou sur Mac OS X

Ou sur les systèmes basés sur Red Hat :

  • service mongod stop

Ou sous Windows si vous avez installé en tant que 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 impur, comment éviter au mieux un tel scénario et que faire en cas d'arrêt impur, veuillez consulter: Récupérer des données après un arrêt inattendu .


5
Je crois que l'ordre de service est sudo service mongodb [start|stop|restart|status]. sudo service stop mongodbrésultats dans: arrêt: service non reconnu
jacob

2
@Jacob - Nous venons d'essayer ceci sur ubuntu, vous avez raison, j'ai édité la réponse.
Andrew M

5
Pour Mac, vous pouvez également simplement faire «killall mongod». De cette façon, vous n'avez pas besoin de connaître le PID.
Jon M

2
Ou sur Mac: 'ps -ax | grep mongod ', puis tuez le numéro de processus
Bryan Grace

1
Dans le nouvel Ubuntu 18.04, je suis capable de l'arrêter en utilisant> sudo service mongod stop ... pas "mongodb"
Naseef Ummer

101

Si vous voulez littéralement une ligne équivalente aux commandes de votre question d'origine, vous pouvez alias:

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

La réponse de Mark sur le démarrage et l'arrêt de MongoDB via les services est l'approche administrative la plus typique (et recommandée).


3
Très bonne réponse. Lors de la configuration de plusieurs instances sur la machine de développement (en essayant le jeu de réplication avant le déploiement), il est utile d'avoir un .bat start C:\mongodb\bin\mongod.exe --config C:\net2\primary1-pc\mongod.cfg start C:\mongodb\bin\mongod.exe --config C:\net2\secondary1-pc\mongod.cfg ... , puis d'avoir shutdown.bat C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27017 C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27018 C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27019 ...
Développeur Marius Žilėnas

2
Sous Windows où il est installé en tant que service, je trouve que net stop MongoDBce n'était pas fiable, donc je quelque chose de similaire: mongo admin --eval "db.shutdownServer()". À votre santé!
NateJ

1
@Stennie Lorsque j'utilise le 'net stop MongoDB' sur Windows, il affiche "L'erreur système 1067 s'est produite"
charan tej

48

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

Plus d'informations sur officiel: http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/


J'adore utiliser cette façon, cela fonctionne aussi sans dbpath, cela a du sens si vous n'avez qu'une seule instance en cours d'exécution.
radtek

2
il semble que cela ne fonctionne pas pour les versions plus récentes, de la 2.4.xx à la dernière.
alexserver

C'est la seule réponse que j'ai vue qui a réellement fonctionné.
David Betz

6
macOS 10.12, mongod v3.4.10: Error parsing command line: unrecognised option '--shutdown':-(
t0r0X

Existe-t-il un comportement défini pour cela s'il est exécuté sur un primaire d'un jeu de réplicas? Il semble se comporter comme db.shutdownServer({force:1,timeoutSecs:0})ce qui empêcherait le vidage des données restantes vers les secondaires. Vous ne voudrez peut-être pas toujours cela.
Daniel F

30

Si le serveur s'exécute en tant que processus de premier plan dans un terminal, cela peut être fait 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 comme kill peut être utilisée pour envoyer le signal. Si mongod a 10014 comme PID, la commande serait

kill -2 10014

3
Utiliser kill n'est pas une bonne idée, cela pourrait conduire à une base de données cassée, qui nécessite une réparation pour redémarrer. "N'utilisez jamais kill -9 (ie SIGKILL) pour terminer une instance de mongod." Docs: docs.mongodb.org/manual/tutorial/manage-mongodb-processes/…
Jens A. Koch

7
@ JensA.Koch Ya, Nanhe ne disait à personne d'utiliser un signal -9, donc .. dire "utiliser kill n'est pas une bonne idée" n'est tout simplement pas exact. Seule la résiliation instantanée est dangereuse - un kill normal est parfaitement sûr et la documentation que vous avez liée le préconise.
BT

18

J'ai suivi la documentation officielle de MongoDB pour m'arrêter avec des signaux. L'une des commandes suivantes peut être utilisée (PID représente Process IDle mongodprocessus):

kill PID

qui envoie le signal 15 (SIGTERM), ou

kill -2 PID

qui envoie le signal 2 (SIGINT).

Avertissement de la documentation MongoDB :
N'utilisez jamais kill -9(ie SIGKILL) pour terminer une mongodinstance.

Si vous avez plus d'une instance en cours d'exécution ou que vous ne vous souciez pas du PID, vous pouvez utiliser pkillpour envoyer le signal à tous les mongodprocessus en cours d'exécution :

pkill mongod

ou

pkill -2 mongod

ou, beaucoup plus sûr, uniquement aux processus vous appartenant:

pkill -U $USER mongod

ou

pkill -2 -U $USER mongod


Note PS : j'ai eu recours à cette option, car mongod --shutdown, bien que mentionnée dans la documentation actuelle de MongoDB , curieusement ne fonctionne pas sur ma machine (macOS, mongodb v3.4.10, installé avechomebrew ):
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 commande
brew services stop mongodb
car je ne l'avais pas démarré avec
brew services start mongodb.
J'avais commencé mongodavec une ligne de commande personnalisée :-)


Excellente réponse, qui a confirmé que MongoDB peut être correctement terminé en utilisant le signal SIGTERM. C'est important si vous exécutez MongoDB dans un Docker - docs.docker.com/compose/compose-file/#stop_grace_period . Notez également que CMD ["mongod", "option", "option"] doit être utilisé pour s'assurer que MongoDB obtient le PID 1, puis le signal envoyé par Docker atteindra votre base de données.
laimison

9

Utilisation mongod --shutdown

Selon le document officiel: manage-mongodb-procedures /

:RÉ


C'est ce que je cherchais. Merci beaucoup.
Gaurav Sharma

Impossible de tuer le processus: errno: 1 Opération non autorisée.
htm11h


C'est ce qui n'a fonctionné que pour moi. Je n'ai pas mongod en tant que service et la commande de démarrage montrait une erreur est une instance de mongod est déjà en cours d'exécution. Merci beaucoup, mec!
Sanjeet un

8

Mon cas particulier est:

auparavant démarrer mongod par:

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

maintenant, je veux arrêter mongod .

et référez-vous à la doc officielle Stop mongod Processes , a essayé:

(1) shutdownServermais a é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échoue toujours:

# 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) utiliser servicepour arrêter:

service mongod stop

et

service mongod status

show attendu Active: inactive (dead)mais en mongodfait 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 , arrêtez vraiment mongod en:

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

jusqu'à présent, cause fondamentale: encore inconnue ...

espérons que la solution ci-dessus est utile pour votre.


6

créer un fichier appelé mongostop.bat

enregistrez-y le code suivant

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

exécutez le fichier mongostop.bat et vous avez réussi à arrêter mongo


4

Un liners pour démarrer ou arrêter le service mongodb en utilisant la ligne de commande;

  1. Pour démarrer le service, utilisez: NET START MONGODB
  2. Pour arrêter l'utilisation du service: NET STOP MONGODB

Je l'utilise moi-même, cela fonctionne.


J'obtiens ceci en utilisant ces commandes sur Windows: c: \ mongodb \ bin> NET START MONGODB Le nom du service n'est pas valide. Une aide supplémentaire est disponible en tapant NET HELPMSG 2185. c: \ mongodb \ bin> NET STOP MONGODB Le nom du service n'est pas valide. Une aide supplémentaire est disponible en tapant NET HELPMSG 2185.

Sous Windows, vous devez d'abord installer mongodb en tant que service à l'aide de l'option --install. Les commandes que vous pouvez utiliser une commande similaire à la suivante pour l'installer en tant que service. mongod --install --directoryperdb --dbpath C: \ mongodb-win32-x86_64-2.4.6 \ data --logpath C: \ mongodb-win32-x86_64-2.4.6 \ log \ mongodb.log --logappend - rest La commande ci-dessus doit être exécutée avec des privilèges d'administrateur. Après cela, vous pouvez utiliser les commandes net start et net stop fournies par Hugo.
Ed Ost

3

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érifiez l'état:

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

Arrêtez MongoDB:

$ sudo service mongod stop
mongod stop/waiting 

2

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 l'arrêt du serveur, ce qui entraînerait un retard et des messages d'erreur. L'ajout de quit () après l'arrêt accélère et réduit les messages, mais il y en a toujours un.

Je souhaite également ajouter du contexte - je démarre et arrête mongod dans le cadre de cas de test pour d'autres codes, donc l'inscription en tant que service ne correspond pas au cas d'utilisation. J'espère finir avec quelque chose qui fonctionne sur toutes les plates-formes (cela a été testé dans Windows en ce moment). J'utilise mongod 3.6.9


1

J'ai simplement fait:

quit();

Veuillez noter que j'utilise mongo 3.0.

Mongo


Si vous exécutiez dans une machine virtuelle, cette commande arrêterait simplement la machine virtuelle.
htm11h

1

dans la fenêtre du terminal sur votre mac, appuyez sur Ctrl + c


Quelqu'un a voté contre cela. C'est, en fait, l'un des moyens d'arrêter mongo selon la documentation mongo. Dans la plupart des situations, cela ne fonctionnera pas, car mongo devrait fonctionner dans ce terminal et non en arrière-plan ou en tant que démon, mais "parfois" cette solution fonctionnera. Lors du vote négatif, il est bon d'expliquer pourquoi
TanisDLJ

1

Utilisation de l'homebrew (méthode recommandée):

Commencer:

brew services start mongodb-community

Arrêter:

brew services stop mongodb-community


0

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

2
Donc, vous tuez mongoDB directement, non? Je suis un débutant de MongoDB, y a-t-il du mal à le tuer? Je sais que pour SQLServer ou Oracle, ils rencontreront des problèmes si nous les tuons simplement.
XiaoYao

tuer est -9 mais -15 u envoyer SIGNAL.
Boris Ivanov


0

Veuillez profiter du gestionnaire de tâches fourni par votre système d'exploitation pour une solution rapide et facile. Ci-dessous se trouve la capture d'écran de / pour Windows 10. Cliquez avec le bouton droit sur le processus en surbrillance et sélectionnez Arrêter . Sélectionnez démarrer , s'il est déjà arrêté.

entrez la description de l'image ici

Remarque: en interne, les commandes font la même chose que vous devez faire manuellement à l'aide d'une interface graphique (gestionnaire de tâches), fournie par Windows / votre système d'exploitation. Cependant, cette approche doit être utilisée à des fins d'étude / pratique pour commencer et vous ne serez pas bloqué à cause de cela.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.