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


88

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

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

> use admin
> db.shutdownServer()

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

вывод моего локального db.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

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


Как вы начали mongod? Просто у снаряда? Используя launchctl?
dcrosta

У вас есть информация из журналов? Возможно, MongoDB «автоматически перезапускается». Возможно, вы захотите запустить --logappend, хотя новый файл журнала явным образом указывает на то, что процесс перезапущен.
Gates VP

Ответы:


175

Вероятно, это потому, что 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команда. Чтобы показать текущие запущенные службы:

brew services list

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

brew services stop mongodb-community

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

brew services stop mongodb-community

Обновить

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


23
В случае, если кому-то интересно, в настоящее время, если у вас установлен mongodb через homebrew, вам действительно нужно сделать, launchctl stop homebrew.mxcl.mongodbчтобы остановить mongodb.
Тайлер Брок

3
По состоянию на сентябрь 2014 г. есть уведомление brewоб отказе от поддержки в отношении brew services:$ brew services Warning: brew services is unsupported and will be removed soon.
Пабло Наварро,

3
По состоянию на декабрь 2014 г. brew servicesбыл удален. $ brew services Error: Unknown command: services
Хьюз

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

1
После запуска службы mongodb мой сервер узла не может подключиться к ней. Однако, если я запускаю mongodb из командной строки, он работает нормально. Я думаю, это проблема с портом. Как установить порт при запуске службы?
Правин

35

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

Вывести список заданий mongo с помощью launchctl:

launchctl list | grep mongo

Прекратить работу монго:

launchctl stop <job label>

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

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

launchctl start <job label>

24

Простой способ - получить идентификатор процесса mongodb и убить его. Обратите внимание, НЕ ИСПОЛЬЗУЙТЕ kill -9 pid для этого, так как это может привести к повреждению базы данных.

Итак, 1. получите pid от mongodb

$ pgrep mongo

вы получите пид монго, сейчас

$ kill

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


8

Если вы установили сервер сообщества mongodb через homebrew, вы можете:

brew services list

Это перечислит текущие службы, как показано ниже:

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

redis             stopped

Затем вы можете перезапустить mongodb, сначала остановив и перезапустив:

brew services stop mongodb
brew services start mongodb

4

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

sudo port unload mongodb

И начать заново.

sudo port load mongodb

3

Посмотрите эти документы:

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

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

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

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


1

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

Если вы установили с, brewто решение на самом деле будет следующим:

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


0

Если служба работает через brew, вы можете остановить ее с помощью следующей команды:

brew services stop mongodb

0

Решения, предоставленные другими, раньше работали для меня, но больше не работают для меня, как показано ниже.

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

Поэтому я использовал mongodb-communityвместо того, mongodbчто у меня работало

brew services stop mongodb-community
brew services start mongodb-community
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.