Який чистий спосіб зупинити mongod на Mac OS X?


84

я запускаю 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

Відповіді:


171

Можливо, це тому, що 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 start mongodb

Щоб зупинити mongodb, якщо він уже запущений:

brew services stop mongodb

Оновлення

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


23
Якщо комусь цікаво, наразі, якщо ви встановили mongodb за допомогою домашньої писемності, вам фактично потрібно 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 з командного рядка, він працює нормально. Я думаю, це має бути проблема з портом .. Як встановити порт під час запуску служби?
pravin

35

Якщо ви встановили mongodb з домоволодінням, існує простіший спосіб:

Перелічіть роботу в 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

ви отримаєте pid монго, зараз

$ вбити

Ви також можете використовувати kill -15


8

Якщо ви встановили сервер спільноти mongodb через домашню мову, ви можете зробити:

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.