Каков чистый способ остановить mongod на Mac OS X?
Я запускаю mongo 1.8.2 и пытаюсь увидеть, как чисто закрыть его на Mac.
на наших серверах ubuntu я могу отключить mongo чисто из оболочки mongo с помощью:
> use admin
> db.shutdownServer()
но на моем Mac это не убивает процесс mongod. выход показывает, что это "должно быть" выключение, но когда я ps-ef | grep mongo, он показывает мне активный процесс. кроме того, я все еще могу открыть оболочку mongo и запросить мой dbs, как будто он никогда не был выключен.
вывод из my децибел.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 ответов
это, вероятно, потому, что 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, есть более простой способ:
список заданий mongo с launchctl:
launchctl list | grep mongo
остановить работу монго:
launchctl stop <job label>
(для меня это launchctl stop homebrew.mxcl.mongodb
)
начать работу монго:
launchctl start <job label>
простой способ-получить идентификатор процесса mongodb и убить его. Обратите внимание, что для этого не используйте kill -9 pid, так как это может привести к повреждению базы данных.
Так, 1. получить pid mongodb
$ pgrep mongo
вы получите pid монго, теперь
$ kill
вы также можете использовать kill -15
Я предпочитаю остановить сервер MongoDB, используя port
сама команда.
sudo port unload mongodb
и начать все сначала.
sudo port load mongodb
проверьте следующие документы:
Если вы запустили его в терминале, вы должны быть в порядке с ctrl + 'c'
-- это сделает чистое завершение работы.
однако, если вы используете launchctl есть конкретные инструкции для того, что будет меняться в зависимости от того, как он был установлен.
Если вы используете Homebrew, это будет launchctl stop homebrew.mxcl.mongodb
Это старый вопрос, но его я нашел во время поиска.
Если вы установили с brew
тогда решение на самом деле будет следующим:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist