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.


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.


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>

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


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

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


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


0

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

brew services stop mongodb

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.