web-dev-qa-db-fra.com

Quelle est la meilleure façon d’arrêter mongodb sur Mac OS X?

j'exécute mongo 1.8.2 et j'essaie de voir comment le fermer proprement sur Mac.

sur nos serveurs Ubuntu, je peux arrêter mongo proprement à partir du shell mongo avec:

> use admin
> db.shutdownServer()

mais sur mon Mac, cela ne tue pas le processus mongod. la sortie montre qu'il "devrait être" éteint mais quand i ps -ef | grep mongo il me montre un processus actif. de plus, je peux toujours ouvrir un shell mongo et interroger mes dbs comme si de rien n'était.

la sortie de mon db.shutdownServer () localement est:

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

je sais que je peux juste tuer le processus, mais j'aimerais le faire plus proprement.

72
emilebaizel

C'est probablement parce que launchctl gère votre instance Mongodod. Si vous voulez démarrer et arrêter une instance de mongod, déchargez-la d'abord:

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

Puis lancez mongod manuellement:

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

Vous pouvez trouver votre emplacement mongod.conf à partir de ~/Library/LaunchAgents/org.mongodb.mongod.plist.

Après cela, db.shutdownServer() fonctionnerait très bien.

Ajouté le 22 février 2014:

Si vous avez mongodb installé via homebrew, homebrew a en fait une commande pratique brew services. Pour afficher les services en cours d'exécution:

brew services list

Pour démarrer mongodb:

brew services start mongodb

Pour arrêter mongodb s'il est déjà en cours d'exécution:

brew services stop mongodb

Mise à jour

Comme edufinn l'a souligné dans le commentaire, brew services Est maintenant disponible en tant que commande définie par l'utilisateur et peut être installé à l'aide de la commande suivante: brew tap gapple/services.

151
James Chen

Si vous avez installé mongodb avec homebrew, il existe un moyen plus simple:

Liste mongo job avec launchctl:

launchctl list | grep mongo

Arrêtez le travail de mongo:

launchctl stop <job label>

(Pour moi c'est launchctl stop homebrew.mxcl.mongodb)

Commencez le travail de mongo:

launchctl start <job label>
26
Raphael

Un moyen simple est d’obtenir l’identifiant du processus mongodb et de le tuer. Veuillez noter NE PAS UTILISER kill -9 pid pour cela car cela pourrait endommager la base de données.

alors, 1. obtenez le pid de mongodb

$ pgrep mongo

vous aurez pid de mongo, maintenant

$ kill

Vous pouvez aussi utiliser kill -15

20
Sanchit Singhania

Je préfère arrêter le serveur MongoDB en utilisant la commande port.

Sudo port unload mongodb

Et pour recommencer.

Sudo port load mongodb
4
Rafa

Découvrez ces docs:

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

Si vous l'avez démarré dans un terminal, vous devriez être d'accord avec un ctrl + 'c' - cela fera un arrêt complet.

Cependant, si vous utilisez launchctl, il existe des instructions spécifiques qui varient en fonction de la manière dont il a été installé.

Si vous utilisez Homebrew, ce serait launchctl stop homebrew.mxcl.mongodb

3
Tyler Brock

C’est une vieille question, mais c’est aussi une question que j’ai trouvée en cherchant.

Si vous avez installé avec brew alors la solution serait la suivante:

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

2