¿Cuál es una forma limpia de detener mongod en Mac OS X?

85

Estoy ejecutando mongo 1.8.2 y trato de ver cómo apagarlo limpiamente en Mac.

en nuestros servidores de ubuntu puedo apagar mongo limpiamente desde el shell mongo con:

> use admin
> db.shutdownServer()

pero en mi Mac, no mata el proceso mongod. la salida muestra que 'debería ser' apagado pero cuando i ps -ef | grep mongo me muestra un proceso activo. Además, todavía puedo abrir un shell mongo y consultar mi base de datos como si nunca se hubiera apagado.

la salida de mi db.shutdownServer () localmente es:

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

Sé que puedo terminar el proceso, pero me gustaría hacerlo de forma más limpia.

Emilebaizel
fuente
¿Cómo ha empezado mongod? ¿Solo en el caparazón? Usando launchctl?
dcrosta
¿Tiene alguna información de los registros? Podría ser que MongoDB se esté "reiniciando automáticamente". Es posible que desee ejecutar con --logappend, aunque un nuevo archivo de registro es una clara indicación de que el proceso se reinició.
Vicepresidente de Gates

Respuestas:

172

Probablemente sea porque launchctl está administrando su instancia mongod. Si desea iniciar y cerrar la instancia de mongod, descárguela primero:

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

Luego inicie mongod manualmente:

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

Puede encontrar su ubicación de mongod.conf en ~/Library/LaunchAgents/org.mongodb.mongod.plist.

Después de eso, db.shutdownServer()funcionaría bien.

Agregado el 22 de febrero de 2014:

Si tiene mongodb instalado a través de homebrew, homebrew en realidad tiene un brew servicescomando útil . Para mostrar los servicios en ejecución actuales:

brew services list

Para iniciar mongodb:

brew services start mongodb

Para detener mongodb si ya se está ejecutando:

brew services stop mongodb

Actualizar

Como edufinn señaló en el comentario, brew servicesya está disponible como comando definido por el usuario y se puede instalar con el siguiente comando: brew tap gapple/services.

James Chen
fuente
23
En caso de que alguien esté interesado, actualmente, si tiene mongodb instalado a través de homebrew, debería hacerlo launchctl stop homebrew.mxcl.mongodbpara detener mongodb.
Tyler Brock
3
A septiembre de 2014, hay un aviso de desaprobación con brewrespecto a brew services:$ brew services Warning: brew services is unsupported and will be removed soon.
Pablo Navarro
3
A diciembre de 2014, brew servicesse ha eliminado. $ brew services Error: Unknown command: services
hughes
6
brew servicesahora está disponible como comando definido por el usuario y se puede instalar con el siguiente comando: brew tap gapple/services.
edufinn
1
Después de iniciar el servicio mongodb, mi servidor de nodo no puede conectarse a él. Sin embargo, si inicio el mongodb desde la línea de comandos, funciona bien. Supongo que debe ser un problema de puerto. ¿Cómo configurar el puerto al iniciar el servicio?
pravin
35

Si instaló mongodb con homebrew, hay una manera más fácil:

Enumere el trabajo de mongo con launchctl:

launchctl list | grep mongo

Detener el trabajo de Mongo:

launchctl stop <job label>

(Para mi esto es launchctl stop homebrew.mxcl.mongodb)

Iniciar trabajo de mongo:

launchctl start <job label>
Raphael
fuente
24

Una forma sencilla es obtener el ID de proceso de mongodb y matarlo. Tenga en cuenta que NO USE kill -9 pid para esto, ya que puede dañar la base de datos.

entonces, 1. obtén el pid de mongodb

$ pgrep mongo

obtendrás pid de mongo, ahora

$ matar

También puedes usar kill -15

Sanchit Singhania
fuente
8

Si ha instalado el servidor de la comunidad mongodb a través de homebrew, puede hacer lo siguiente:

brew services list

Esto enumerará los servicios actuales de la siguiente manera:

Name              Status  User          Plist
mongodb-community started thehaystacker /Users/thehaystacker/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist

redis             stopped

Luego, puede reiniciar mongodb deteniéndose primero y reiniciando:

brew services stop mongodb
brew services start mongodb
the_haystacker
fuente
4

Prefiero detener el servidor MongoDB usando el portcomando en sí.

sudo port unload mongodb

Y empezar de nuevo.

sudo port load mongodb
Rafa
fuente
1

Esta es una pregunta antigua, pero también la encontré mientras buscaba.

Si lo instaló con brew, la solución en realidad sería la siguiente:

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

Alexander Swensen
fuente
0

Si el servicio se está ejecutando a través de brew, puede detenerlo usando el siguiente comando:

brew services stop mongodb
KayV
fuente
0

Las soluciones proporcionadas por otros solían funcionar para mí, pero ya no me funcionan, como se muestra a continuación.

brew services stop mongodb
brew services start mongodb

brew services list da

Name              Status  User      Plist
mongodb-community started XXXXXXXXX /Users/XXXXXXXXX/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist

Entonces usé en mongodb-communitylugar de lo mongodbque funcionó para mí

brew services stop mongodb-community
brew services start mongodb-community
Arnold Parge
fuente