Как остановить монго БД в одной команде

123

Мне нужно запустить/остановить MongoDB на кли. Это довольно просто начать:

./mongod

Но чтобы остановить Mongo DB, мне нужно сначала запустить открытую оболочку mongo, а затем ввести две команды:

$./mongo

использовать admin

db.shutdownServer()

Поэтому я не знаю, как остановить mongo DB в одной строке. Любая помощь?

Теги:

15 ответов

169
Лучший ответ

Запуск и остановка MongoDB рассматривается в руководстве MongoDB. Он объясняет различные варианты остановки MongoDB через оболочку, cli, драйверы и т.д. Он также детализирует риски неправильной остановки MongoDB (например, повреждение данных) и рассказывает о различных сигналах уничтожения.

Кроме того, если вы установили MongoDB, используя менеджер пакетов для Ubuntu или Debian, вы можете остановить mongodb (ранее mongod) следующим образом:

  • Выскочка: sudo service mongodb stop

  • Сисвинит: sudo/etc/init.d/mongodb stop

Или в Mac OS X

Или в системах на базе Red Hat:

  • service mongod stop

Или в Windows, если вы установили как службу с именем MongoDB:

  • net stop MongoDB

И если не установлено как служба (начиная с Windows 7+), вы можете запустить:

  • taskkill/f/im mongod.exe

Чтобы узнать больше о проблемах нечистого выключения, о том, как наилучшим образом избежать такого сценария и что делать в случае нечистого выключения, см. " Восстановление данных после неожиданного выключения".

  • 5
    Я считаю, что заказ на обслуживание - это sudo service mongodb [start|stop|restart|status] . sudo service stop mongodb приводит к: stop: неопознанная служба
  • 2
    @Jacob - Мы только что попробовали это на Ubuntu, вы правы, я отредактировал ответ.
Показать ещё 7 комментариев
83

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

mongo --eval "db.getSiblingDB('admin').shutdownServer()"

Отметить ответ на запуск и остановку MongoDB через службы является более типичным (и рекомендуемым) административным подходом.

  • 2
    Отличный ответ. При настройке нескольких экземпляров на компьютере разработчика (пробуя набор репликации перед развертыванием) start C:\mongodb\bin\mongod.exe --config C:\net2\primary1-pc\mongod.cfg start C:\mongodb\bin\mongod.exe --config C:\net2\secondary1-pc\mongod.cfg ... .bat start C:\mongodb\bin\mongod.exe --config C:\net2\primary1-pc\mongod.cfg start C:\mongodb\bin\mongod.exe --config C:\net2\secondary1-pc\mongod.cfg ... и затем иметь shutdown.bat C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27017 C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27018 C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27019 ...
  • 2
    В Windows, где он установлен как сервис, я обнаружил, что net stop MongoDB не надежен, поэтому я использовал нечто подобное: mongo admin --eval "db.shutdownServer()" . Ура!
Показать ещё 1 комментарий
38

mongod --dbpath /path/to/your/db --shutdown

Дополнительная информация на официальном сайте: http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/

  • 0
    Мне нравится использовать этот способ, он работает и без dbpath, имеет смысл, если у вас работает только один экземпляр.
  • 1
    кажется, он не работает для более новых версий, от 2.4.xx до последней.
Показать ещё 6 комментариев
24

Если сервер работает как процесс переднего плана в терминале, это можно сделать, нажав

Ctrl-C

Еще один способ чисто выключения работающего сервера - использовать команду shutdown,

> use admin
> db.shutdownServer();

В противном случае для отправки может использоваться команда типа kill сигнал. Если mongod имеет 10014 в качестве своего PID, команда будет

kill -2 10014
  • 2
    Использование kill не является хорошей идеей, это может привести к поломке БД, которая требует восстановления для перезапуска. «Никогда не используйте kill -9 (то есть SIGKILL), чтобы завершить работу экземпляра mongod». Документы: docs.mongodb.org/manual/tutorial/manage-mongodb-processes/…
  • 5
    @ JensA.Koch Да, Наньхэ никому не говорил использовать сигнал -9, поэтому сказать: «убить не очень хорошая идея» просто не правильно. Только мгновенное завершение небезопасно - нормальное уничтожение совершенно безопасно, и документация, на которую вы ссылаетесь, поддерживает это.
9

Я следовал официальной документации MongoDB для остановки с сигналами. Можно использовать одну из следующих команд (PID представляет Process ID процесса mongod):

kill PID

который отправляет сигнал 15 (SIGTERM), или

kill -2 PID

который посылает сигнал 2 (SIGINT).

Предупреждение из документации MongoDB :
Никогда не используйте kill -9 (то есть SIGKILL), чтобы завершить mongod экземпляра mongod.

Если у вас запущено несколько экземпляров или вам не pkill PID, вы можете использовать pkill для отправки сигнала всем запущенным процессам mongod:

pkill mongod

или же

pkill -2 mongod

или, что гораздо безопаснее, только процессам, принадлежащим вам:

pkill -U $USER mongod

или же

pkill -2 -U $USER mongod

PS
Примечание: я прибег к этой опции, потому что mongod --shutdown, хотя и упоминается в текущей документации MongoDB, любопытно, что не работает на моей машине (macOS, mongodb v3.4.10, установлен с homebrew):
Error parsing command line: unrecognised option '--shutdown'

PPS
(специфично для macOS) Прежде чем кто-нибудь задумывается: нет, я не мог остановить это командой
brew services stop mongodb
потому что я не начал это с
brew services start mongodb.
Я начал mongod с пользовательской командной строки :-)

5

Используйте mongod --shutdown

Согласно официальному документу: manage-mongodb-Процессы/

: D

  • 0
    Это то, что я искал. Большое спасибо.
  • 0
    Не удалось завершить процесс: errno: 1 Операция не разрешена.
Показать ещё 1 комментарий
4

Один лайнер для запуска или остановки службы mongodb с помощью командной строки;

  • Для запуска службы используйте: NET START MONGODB
  • Чтобы остановить использование службы: NET STOP MONGODB

Я использую это сам, он работает.

  • 0
    Я получаю это при использовании этих команд в Windows: c: \ mongodb \ bin> NET START MONGODB Неверное имя службы. Для получения дополнительной справки введите NET HELPMSG 2185. c: \ mongodb \ bin> NET STOP MONGODB Неверное имя службы. Дополнительную помощь можно получить, набрав NET HELPMSG 2185.
  • 0
    В Windows сначала нужно установить mongodb как сервис, используя опцию --install. Команды, которые вы можете использовать команду, подобную следующей, чтобы установить его в качестве службы. mongod --install --directoryperdb --dbpath C: \ mongodb-win32-x86_64-2.4.6 \ data --logpath C: \ mongodb-win32-x86_64-2.4.6 \ log \ mongodb.log --logappend - rest Команда, указанная выше, должна выполняться с правами администратора. После этого вы можете использовать команды net start и net stop, предоставленные Hugo.
3

создайте файл с именем mongostop.bat

сохранить в нем следующий код

 mongo admin --eval "db.shutdownServer()"

запустите файл mongostop.bat, и вы успешно остановили mongo

2

Из данных команд я думаю, что вы на Linux.

Начать MongoDB:

$ sudo service mongod start
mongod start/running, process XXXXX 

Проверить статус:

$ sudo service mongod status
mongod start/running, process XXXXX 

Остановить MongoDB:

$ sudo service mongod stop
mongod stop/waiting 
1

CTRL + C

в командной строке Windows

1

в окне терминала на вашем mac, нажмите control + c

  • 0
    Кто-то отрицал это. Фактически, это один из способов остановить монго в соответствии с документацией монго. В большинстве ситуаций это не будет работать, так как монго должно работать в этом терминале, а не в фоновом режиме или как демон, но «иногда» это решение будет работать. При понижении голосов приятно объяснить, почему
1

Я просто сделал:

quit();

Обратите внимание, что я использую mongo 3.0.

Mongo

  • 0
    Если вы работаете в ВМ, эта команда просто остановит ВМ.
  • 0
    Полезно знать, спасибо
0

Опираясь на ответ от стенние:

mongo --eval "db.getSiblingDB('admin').shutdownServer();quit()"

Я обнаружил, что Монго пытается восстановить соединение с БД после выключения сервера, что может вызвать задержку и сообщения об ошибках. Добавление quit() после выключения ускоряет его и уменьшает количество сообщений, но оно все еще остается.

Я также хочу добавить контекст - я запускаю и останавливаю mongod как часть тестов для другого кода, поэтому регистрация в качестве службы не подходит для варианта использования. Я надеюсь в конечном итоге что-то, что работает на всех платформах (это проверено в Windows прямо сейчас). Я использую Mongod 3.6.9

0

Окна

В PowerShell это: Stop-Service MongoDB

Затем, чтобы запустить его снова: Start-Service MongoDB

Чтобы проверить, запущена ли она, запустите: net start | findstr MongoDB.

Примечание: выше принимает MongoDB зарегистрирован как услуга.

0

Я использую этот запуск script в Ubuntu.

#!/bin/sh

### BEGIN INIT INFO
# Provides:     mongodb
# Required-Sart:
# Required-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description: mongodb
# Description: mongo db server
### END INIT INFO

. /lib/lsb/init-functions

PROGRAM=/opt/mongo/bin/mongod
MONGOPID=`ps -ef | grep 'mongod' | grep -v grep | awk '{print $2}'`

test -x $PROGRAM || exit 0

case "$1" in
  start)
     log_begin_msg "Starting MongoDB server"
         ulimit -v unlimited.
         ulimit -n 100000
     /opt/mongo/bin/mongod --fork --quiet --dbpath /data/db --bind_ip 127.0.0.1 --rest   --config /etc/mongod.conf.
     log_end_msg 0
     ;;
  stop)
     log_begin_msg "Stopping MongoDB server"
     if [ ! -z "$MONGOPID" ]; then
kill -15 $MONGOPID
     fi
     log_end_msg 0
     ;;
  status)
     ;;
  *)
     log_success_msg "Usage: /etc/init.d/mongodb {start|stop|status}"
     exit 1
esac

exit 0
  • 2
    То есть вы просто убиваете mongoDB напрямую, верно? Я новичок в MongoDB, есть ли вред, чтобы убить его? Я знаю, что для SQLServer или Oracle они столкнутся с проблемами, если мы их просто убьем.
  • 0
    убить -9 но -15 и отправить СИГНАЛ.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню