Мне нужно запустить/остановить MongoDB на кли. Это довольно просто начать:
./mongod
Но чтобы остановить Mongo DB, мне нужно сначала запустить открытую оболочку mongo, а затем ввести две команды:
$./mongo
использовать admin
db.shutdownServer()
Поэтому я не знаю, как остановить mongo DB в одной строке. Любая помощь?
Запуск и остановка MongoDB рассматривается в руководстве MongoDB. Он объясняет различные варианты остановки MongoDB через оболочку, cli, драйверы и т.д. Он также детализирует риски неправильной остановки MongoDB (например, повреждение данных) и рассказывает о различных сигналах уничтожения.
Кроме того, если вы установили MongoDB, используя менеджер пакетов для Ubuntu или Debian, вы можете остановить mongodb (ранее mongod) следующим образом:
Выскочка: sudo service mongodb stop
Сисвинит: sudo/etc/init.d/mongodb stop
Или в Mac OS X
Найдите PID процесса mongod, используя $ top
Завершите процесс с помощью $ kill <PID>
(в документации Mongo больше информации об этом)
Или в системах на базе Red Hat:
service mongod stop
Или в Windows, если вы установили как службу с именем MongoDB
:
net stop MongoDB
И если не установлено как служба (начиная с Windows 7+), вы можете запустить:
taskkill/f/im mongod.exe
Чтобы узнать больше о проблемах нечистого выключения, о том, как наилучшим образом избежать такого сценария и что делать в случае нечистого выключения, см. " Восстановление данных после неожиданного выключения".
Если вы буквально хотите, чтобы одна строка была эквивалентна командам в исходном вопросе, вы можете использовать псевдоним:
mongo --eval "db.getSiblingDB('admin').shutdownServer()"
Отметить ответ на запуск и остановку MongoDB через службы является более типичным (и рекомендуемым) административным подходом.
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 ...
net stop MongoDB
не надежен, поэтому я использовал нечто подобное: mongo admin --eval "db.shutdownServer()"
. Ура!
mongod --dbpath /path/to/your/db --shutdown
Дополнительная информация на официальном сайте: http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/
Если сервер работает как процесс переднего плана в терминале, это можно сделать, нажав
Ctrl-C
Еще один способ чисто выключения работающего сервера - использовать команду shutdown,
> use admin
> db.shutdownServer();
В противном случае для отправки может использоваться команда типа kill сигнал. Если mongod имеет 10014 в качестве своего PID, команда будет
kill -2 10014
Я следовал официальной документации 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
с пользовательской командной строки :-)
Один лайнер для запуска или остановки службы mongodb с помощью командной строки;
NET START MONGODB
NET STOP MONGODB
Я использую это сам, он работает.
создайте файл с именем mongostop.bat
сохранить в нем следующий код
mongo admin --eval "db.shutdownServer()"
запустите файл mongostop.bat, и вы успешно остановили mongo
Из данных команд я думаю, что вы на 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
CTRL + C
в командной строке Windows
в окне терминала на вашем mac, нажмите control + c
Опираясь на ответ от стенние:
mongo --eval "db.getSiblingDB('admin').shutdownServer();quit()"
Я обнаружил, что Монго пытается восстановить соединение с БД после выключения сервера, что может вызвать задержку и сообщения об ошибках. Добавление quit() после выключения ускоряет его и уменьшает количество сообщений, но оно все еще остается.
Я также хочу добавить контекст - я запускаю и останавливаю mongod как часть тестов для другого кода, поэтому регистрация в качестве службы не подходит для варианта использования. Я надеюсь в конечном итоге что-то, что работает на всех платформах (это проверено в Windows прямо сейчас). Я использую Mongod 3.6.9
В PowerShell это: Stop-Service MongoDB
Затем, чтобы запустить его снова: Start-Service MongoDB
Чтобы проверить, запущена ли она, запустите: net start | findstr MongoDB
.
Примечание: выше принимает MongoDB зарегистрирован как услуга.
Я использую этот запуск 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
sudo service mongodb [start|stop|restart|status]
.sudo service stop mongodb
приводит к: stop: неопознанная служба