Какой чистый способ остановить mongod на Mac OS X?


Я запускаю mongo 1.8.2 и пытаюсь увидеть, как чисто закрыть его на Mac.

на наших серверах ubuntu я могу отключить mongo чисто из оболочки mongo с помощью:

> use admin
> db.shutdownServer()

но на моем Mac он не убивает процесс mongod. вывод показывает, что он "должен быть" выключен, но когда я ps-ef | grep mongo, он показывает мне активный процесс. кроме того, я все еще могу открыть оболочку mongo и запросить мою базу данных, как будто она никогда не была выключена.

выход из моей децибел.shutdownServer() локально является:

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

Я знаю, что я могу просто убить процесс, но я хотел бы сделать это более аккуратно.

6 64

6 ответов:

это, вероятно, потому, что launchctl управляет вашим экземпляром mongod. Если вы хотите запустить и завершить работу экземпляра mongod, сначала выгрузите его:

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

затем запустите mongod вручную:

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

вы можете найти свой mongod.расположение conf с ~/Library/LaunchAgents/org.mongodb.mongod.plist.

после этого, db.shutdownServer() будет работать нормально.

Добавлено 22 Февраля 2014:

если у вас установлен mongodb через homebrew, homebrew на самом деле имеет удобный . Чтобы показать текущие запущенные службы:

brew services list

чтобы запустить mongodb:

brew services start mongodb

чтобы остановить mongodb, если он уже запущен:

brew services stop mongodb

обновление

как edufinn отметил в комментарии brew services теперь доступно как пользовательские команды и может быть установлен с помощью следующей команды: brew tap gapple/services.

если вы установили mongodb с homebrew, есть более простой способ:

список заданий монго с launchctl:

launchctl list | grep mongo

Stop mongo job:

launchctl stop <job label>

(для меня это launchctl stop homebrew.mxcl.mongodb)

начать работу монго:

launchctl start <job label>

простой способ-получить идентификатор процесса mongodb и убить его. Пожалуйста, обратите внимание, не используйте kill -9 pid для этого, так как это может привести к повреждению базы данных.

Так, 1. получить pid mongodb

$ pgrep mongo

вы получите пид монго, теперь

$ kill

вы также можете использовать kill -15

Я предпочитаю остановить сервер MongoDB с помощью port сама команда.

sudo port unload mongodb

и начать все сначала.

sudo port load mongodb

проверьте следующие документы:

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

Если вы запустили его в терминале, вы должны быть в порядке с ctrl + 'c' -- это сделает чистое выключение.

однако, если вы используете launchctl есть конкретные инструкции для того, что будет варьироваться в зависимости от того, как он был установлен.

Если вы используете Homebrew это будет launchctl stop homebrew.mxcl.mongodb

Это старый вопрос, но его я нашел во время поиска, а также.

Если вы установили с brew тогда решение будет на самом деле быть такой:

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