Какой чистый способ остановить 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

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

Emilebaizel
источник
Как вы начали 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
the_haystacker
источник
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
KayV
источник
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
Арнольд Пардж
источник