¿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.


¿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.


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>

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


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

4

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

sudo port unload mongodb

Y empezar de nuevo.

sudo port load mongodb


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


0

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

brew services stop mongodb

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.