Qual é uma maneira limpa de parar o mongod no Mac OS X?

88

Estou executando o mongo 1.8.2 e tentando ver como desligá-lo de forma limpa no Mac.

em nossos servidores ubuntu, posso desligar o mongo de forma limpa do shell do mongo com:

> use admin
> db.shutdownServer()

mas no meu Mac, ele não mata o processo mongod. a saída mostra que 'deveria ser' encerrado, mas quando i ps -ef | grep mongo ele me mostra um processo ativo. Além disso, ainda posso abrir um shell mongo e consultar meu banco de dados como se ele nunca tivesse sido desligado.

a saída do meu db.shutdownServer () localmente é:

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

Eu sei que posso simplesmente eliminar o processo, mas gostaria de fazer isso de forma mais limpa.

Emilebaizel
fonte
Como você começou mongod? Apenas na concha? Usando launchctl?
dcrosta
Você tem alguma informação dos logs? Pode ser que o MongoDB esteja "reiniciando automaticamente". Você pode querer executar com --logappend, embora um arquivo de log totalmente novo seja uma indicação clara de que o processo foi reiniciado.
Gates VP

Respostas:

175

Provavelmente é porque o launchctl está gerenciando sua instância do mongod. Se você deseja iniciar e desligar a instância mongod, descarregue-a primeiro:

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

Em seguida, inicie o mongod manualmente:

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

Você pode encontrar seu local mongod.conf em ~/Library/LaunchAgents/org.mongodb.mongod.plist.

Depois disso, db.shutdownServer()funcionaria muito bem.

Adicionado em 22 de fevereiro de 2014:

Se você instalou o mongodb via homebrew, o homebrew tem um brew servicescomando útil . Para mostrar os serviços atuais em execução:

brew services list

Para iniciar o mongodb:

brew services stop mongodb-community

Para interromper o mongodb se já estiver em execução:

brew services stop mongodb-community

Atualizar

Como edufinn apontadas no comentário, brew servicesestá agora disponível como comando definido pelo usuário e pode ser instalado com seguinte comando: brew tap gapple/services.

James Chen
fonte
23
Caso alguém esteja interessado, atualmente, se você tem o mongodb instalado via homebrew, você realmente precisa fazer launchctl stop homebrew.mxcl.mongodbpara parar o mongodb.
Tyler Brock
3
Em setembro de 2014, há um aviso de depreciação em brewrelação a brew services:$ brew services Warning: brew services is unsupported and will be removed soon.
Pablo Navarro
3
Em dezembro de 2014, brew servicesfoi removido. $ brew services Error: Unknown command: services
hughes
6
brew servicesestá agora disponível como comando definido pelo usuário e pode ser instalado com seguinte comando: brew tap gapple/services.
edufinn
1
Depois de iniciar o serviço mongodb, meu servidor de nó não consegue se conectar a ele. No entanto, se eu iniciar o mongodb na linha de comando, ele funcionará bem. Acho que deve ser problema de porta .. Como configurar a porta ao iniciar o serviço?
pravin
35

Se você instalou o mongodb com homebrew, há uma maneira mais fácil:

Listar trabalho mongo com launchctl:

launchctl list | grep mongo

Pare o trabalho do mongo:

launchctl stop <job label>

(Para mim isso é launchctl stop homebrew.mxcl.mongodb)

Comece o trabalho mongo:

launchctl start <job label>
Rafael
fonte
24

Uma maneira simples é obter o id do processo de mongodb e eliminá-lo. Por favor, note NÃO USE kill -9 pid para isso, pois pode causar danos ao banco de dados.

então, 1. obtenha o pid de mongodb

$ pgrep mongo

você vai receber pid de mongo, agora

$ kill

Você pode usar kill -15 também

Sanchit Singhania
fonte
8

Se você instalou o servidor da comunidade mongodb via homebrew, pode fazer:

brew services list

Isso listará os serviços atuais conforme abaixo:

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

redis             stopped

Então você pode reiniciar o mongodb primeiro parando e reiniciando:

brew services stop mongodb
brew services start mongodb
the_haystacker
fonte
4

Eu prefiro parar o servidor MongoDB usando o portpróprio comando.

sudo port unload mongodb

E para começar de novo.

sudo port load mongodb
Rafa
fonte
3

Confira estes documentos:

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

Se você o iniciou em um terminal, deve estar ok com um ctrl + 'c'- isso fará um desligamento limpo.

No entanto, se você estiver usando o launchctl, existem instruções específicas para isso, que variam dependendo de como foi instalado.

Se você estiver usando o Homebrew, seria launchctl stop homebrew.mxcl.mongodb

Tyler Brock
fonte
1

Esta é uma pergunta antiga, mas também encontrei durante a pesquisa.

Se você instalou com brew, a solução seria realmente esta:

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

Alexander Swensen
fonte
0

Se o serviço estiver sendo executado via brew, você pode interrompê-lo usando o seguinte comando:

brew services stop mongodb
KayV
fonte
0

As soluções fornecidas por outros costumavam funcionar para mim, mas não estão mais funcionando para mim, que é como abaixo.

brew services stop mongodb
brew services start mongodb

brew services list

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

Então eu usei, em mongodb-communityvez do mongodbque funcionou para mim

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