177

我需要能够在 cli 上启动/停止 MongoDB。开始很简单:

./mongod

但是要停止 mongo DB,我需要先运行 open mongo shell,然后键入两个命令:

$ ./mongo

使用管理员

db.shutdownServer()

所以我不知道如何在一行中停止 mongo DB。有什么帮助吗?

4

19 回答 19

269

MongoDB 手册中介绍了启动和停止 MongoDB。它解释了通过 shell、cli、驱动程序等停止 MongoDB 的各种选项。它还详细说明了错误停止 MongoDB 的风险(例如数据损坏)并讨论了不同的终止信号。

此外,如果您使用UbuntuDebian的包管理器安装了 MongoDB,那么您可以停止 mongodb(当前是 ubuntu 中的 mongod),如下所示:

  • 暴发户:sudo service mongod stop

  • 系统:sudo /etc/init.d/mongod stop

或者在Mac OS X上

或者在基于Red Hat的系统上:

  • service mongod stop

或者在Windows上,如果您已安装为名为的服务MongoDB

  • net stop MongoDB

如果没有作为服务安装(从 Windows 7+ 开始),您可以运行:

  • taskkill /f /im mongod.exe

要了解有关非正常关机问题的更多信息、如何最好地避免这种情况以及在非正常关机的情况下如何处理,请参阅:意外关机后恢复数据

于 2012-08-02T11:45:32.277 回答
114

如果您确实想要与原始问题中的命令等效的一行,则可以使用别名:

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

Mark 关于通过服务启动和停止 MongoDB 的回答是更典型(也是推荐的)管理方法。

于 2012-08-02T12:10:25.477 回答
55

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

更多官方信息: http: //docs.mongodb.org/manual/tutorial/manage-mongodb-processes/

于 2014-03-16T13:56:11.737 回答
36

如果服务器在终端中作为前台进程运行,可以通过按

Ctrl-C

另一种彻底关闭正在运行的服务器的方法是使用 shutdown 命令,

> use admin
> db.shutdownServer();

否则,可以使用 kill 之类的命令来发送信号。如果 mongod 的 PID 为 10014,则命令为

kill -2 10014
于 2014-02-20T13:26:14.353 回答
21

我遵循了官方MongoDB 文档来停止使用信号。可以使用以下命令之一(PID 表示Process ID进程的mongod):

kill PID

发送信号 15 (SIGTERM),或

kill -2 PID

它发送信号 2 (SIGINT)。

来自MongoDB 文档的警告:
永远不要使用kill -9(即 SIGKILL)来终止mongod实例。

如果您有多个实例正在运行或者您不关心 PID,则可以使用pkill将信号发送到所有正在运行的mongod进程:

pkill mongod

或者

pkill -2 mongod

或者,更安全的是,只对属于您的进程:

pkill -U $USER mongod

或者

pkill -2 -U $USER mongod

注意:如果数据库以其他用户身份运行,但您具有管理权限,则您已使用 , 调用上述命令sudo以运行它们。例如:

sudo pkill mongod
sudo pkill -2 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自定义命令行开始:-)

于 2017-11-21T19:13:23.673 回答
12

采用mongod --shutdown

根据官方文档:manage-mongodb-processes/

:D

于 2017-08-03T08:26:58.560 回答
8

创建一个名为 mongostop.bat 的文件

将以下代码保存在其中

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

运行文件 mongostop.bat ,你成功地停止了 mongo

于 2017-11-17T16:15:32.880 回答
8

我的特殊情况是:

以前通过以下方式启动 mongod:

sudo -u mongod mongod -f /etc/mongod.conf

现在,想停下来mongod

并参考官方文档Stop mongod Processes,尝试过:

(1)shutdownServer但失败了:

> use admin
switched to db admin
> db.shutdownServer()
2019-03-06T14:13:15.334+0800 E QUERY    [thread1] Error: shutdownServer failed: {
        "ok" : 0,
        "errmsg" : "shutdown must run from localhost when running db without auth",
        "code" : 13
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.shutdownServer@src/mongo/shell/db.js:302:1
@(shell):1:1

(2)--shutdown仍然失败:

# mongod --shutdown
There doesn't seem to be a server running with dbpath: /data/db

(3) 之前的启动命令添加--shutdown:

sudo -u mongod mongod -f /etc/mongod.conf --shutdown
killing process with pid: 30213
failed to kill process: errno:1 Operation not permitted

(4) 使用service停止:

service mongod stop

service mongod status

显示预期Active: inactive (dead)mongod实际上仍在运行,因为可以从 ps 中看到进程:

# ps -edaf | grep mongo | grep -v grep
root     30213     1  0 Feb04 ?        03:33:22 mongod --port PORT --dbpath=/var/lib/mongo

最后,真正停止mongod

# sudo mongod -f /etc/mongod.conf --shutdown
killing process with pid: 30213

直到现在,根本原因:仍然未知......

希望以上解决方案对您有用。

于 2019-03-06T08:00:17.187 回答
5

一个使用命令行启动或停止 mongodb 服务的衬垫;

  1. 要启动服务使用:NET START MONGODB
  2. 要停止服务使用:NET STOP MONGODB

我自己用这个,它确实有效。

于 2013-04-16T13:55:48.877 回答
5

基于 stennie 的回答:

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

我发现 mongo 在服务器关闭后试图重新连接到数据库,这会导致延迟和错误消息。在关机后添加 quit() 可以加快速度并减少消息,但仍然存在。

我还想添加上下文 - 我正在启动和停止 mongod 作为其他代码测试用例的一部分,因此注册为服务不适合用例。我希望最终得到可以在所有平台上运行的东西(现在在 Windows 中进行了测试)。我正在使用 mongod 3.6.9

于 2019-01-09T22:13:03.433 回答
3

根据给定的命令,我认为您使用的是 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 
于 2016-09-14T19:45:33.803 回答
2

使用自制软件(推荐方式):

开始:

brew services start mongodb-community

停止:

brew services stop mongodb-community

于 2020-05-31T15:38:07.937 回答
1

我只是做了:

quit();

请注意我使用的是 mongo 3.0。

蒙哥

于 2015-12-25T18:42:04.470 回答
1

在 Mac 的终端窗口中,按 control+c

于 2017-03-23T13:55:09.393 回答
0

我在 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
于 2012-08-02T09:51:12.350 回答
0

视窗

在 PowerShell 中,它是:Stop-Service MongoDB

然后重新开始:Start-Service MongoDB

要验证它是否已启动,请运行:net start | findstr MongoDB

注意:以上假设MongoDB 已注册为服务

于 2017-10-20T13:57:15.230 回答
0

请利用您的操作系统提供的任务管理器来获得快速简便的解决方案。下面是 Windows 10 的屏幕截图。右键单击突出显示的进程并选择stop。如果已经停止,请选择start 。

在此处输入图像描述

请注意:在内部,命令执行的操作与您必须使用 Windows/您的操作系统提供的 GUI(任务管理器)手动执行的操作相同。不过,这种方法可用于学习/练习目的,您不会因此而被阻止。

于 2020-04-16T15:14:18.530 回答
0

启动 sudo /etc/init.d/mongodb start

停止 sudo /etc/init.d/mongodb stop

于 2021-08-06T13:04:44.267 回答
-3

CTRL + C

在 Windows 命令行上

于 2018-02-14T15:46:23.603 回答