如何在一个命令中停止mongo DB

Xia*_*Yao 142 mongodb

我需要能够在cli上启动/停止MongoDB.这很简单:

./mongod

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

$ ./mongo

使用管理员

db.shutdownServer()

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

Mar*_*ick 209

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

另外,如果您使用UbuntuDebian的软件包管理器安装了MongoDB,那么您可以按如下方式停止mongodb(以前的mongod):

  • 暴发户: sudo service mongodb stop

  • sysvinit的: 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

要了解有关不干净关闭问题的更多信息,如何最好地避免这种情况以及在发生不正常关闭时该怎么做,请参阅:在意外关闭后恢复数据.

  • 我相信服务的顺序是`sudo service mongodb [start | stop | restart | status]`.`sudo service stop mongodb`导致:_stop:无法识别的服务_ (5认同)
  • 对于Mac,你也可以做'killall mongod'.这样,您不需要知道PID. (4认同)
  • @Jacob - 我们刚刚在ubuntu上试过这个,你说对了,我已经编辑了答案. (2认同)
  • 或者在Mac上:'ps -ax | grep mongod',然后杀死进程号 (2认同)

Ste*_*nie 94

如果你真的想要一行等同于原始问题中的命令,你可以使用别名:

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

Mark通过服务启动和停止MongoDB的答案是更典型(和推荐)的管理方法.

  • 好答案。在开发计算机上设置多个实例时(在部署之前尝试复制集),有助于使.bat`start C:\ mongodb \ bin \ mongod.exe --config C:\ net2 \ primary1-pc \ mongod.cfg启动C:\ mongodb \ bin \ mongod.exe --config C:\ net2 \ secondary1-pc \ mongod.cfg ...`然后关闭shutdown.bat`C:\ mongodb \ bin \ mongo.exe --eval “ db.getSiblingDB('admin'.. shutdownServer()”“-端口27017 C:\ mongodb \ bin \ mongo.exe --eval” db.getSiblingDB('admin')。shutdownServer()“-端口27018 C :\ mongodb \ bin \ mongo.exe --eval“ db.getSiblingDB('admin')。shutdownServer()”-端口27019 ... (2认同)
  • 在作为服务安装的Windows上,我发现`net stop MongoDB`不可靠,因此我使用了类似的东西:`mongo admin --eval“ db.shutdownServer()”`。干杯! (2认同)

fra*_*srv 45

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

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

  • macOS 10.12,`mongod v3.4.10`:`解析命令行时出错:无法识别的选项'--shutdown'` :-( (4认同)
  • 它似乎不适用于从 2.4.xx 到最新版本的较新版本。 (2认同)

Nan*_*mar 27

如果服务器作为终端中的前台进程运行,则可以通过按下来完成

Ctrl-C
Run Code Online (Sandbox Code Playgroud)

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

> use admin
> db.shutdownServer();
Run Code Online (Sandbox Code Playgroud)

否则,可以使用kill之类的命令发送信号.如果mongod将10014作为其PID,则命令为

kill -2 10014
Run Code Online (Sandbox Code Playgroud)

  • @JensA.Koch Ya,Nanhe没有告诉任何人使用-9信号,因此说"使用kill不是一个好主意"根本就不准确.只有即时终止是不安全的 - 正常的终止是完全安全的,你链接的文档提倡它. (7认同)
  • 使用kill不是一个好主意,这可能会导致数据库损坏,需要修复才能重启."永远不要使用kill -9(即SIGKILL)来终止mongod实例." 文档:http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/#use-kill (3认同)

t0r*_*r0X 13

我按照官方的MongoDB文档来停止信号.一个下面的命令,可以使用的(PID表示Process ID的的mongod处理):

kill PID
Run Code Online (Sandbox Code Playgroud)

发送信号15(SIGTERM),或

kill -2 PID
Run Code Online (Sandbox Code Playgroud)

发送信号2(SIGINT).

来自MongoDB文档的警告:
切勿使用kill -9(即SIGKILL)终止mongod实例.

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

pkill mongod
Run Code Online (Sandbox Code Playgroud)

要么

pkill -2 mongod
Run Code Online (Sandbox Code Playgroud)

或者,更安全,只对属于你的过程:

pkill -U $USER mongod
Run Code Online (Sandbox Code Playgroud)

要么

pkill -2 -U $USER mongod
Run Code Online (Sandbox Code Playgroud)

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使用自定义命令行:-)


cri*_*fan 8

我的特殊情况是:

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

sudo -u mongod mongod -f /etc/mongod.conf
Run Code Online (Sandbox Code Playgroud)

现在,想停下来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
Run Code Online (Sandbox Code Playgroud)

(2)--shutdown仍然失败:

# mongod --shutdown
There doesn't seem to be a server running with dbpath: /data/db
Run Code Online (Sandbox Code Playgroud)

(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
Run Code Online (Sandbox Code Playgroud)

(4) 使用service停止:

service mongod stop
Run Code Online (Sandbox Code Playgroud)

service mongod status
Run Code Online (Sandbox Code Playgroud)

显示预期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
Run Code Online (Sandbox Code Playgroud)

最后,真的被停止的mongod:

# sudo mongod -f /etc/mongod.conf --shutdown
killing process with pid: 30213
Run Code Online (Sandbox Code Playgroud)

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

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


Ade*_*IMM 7

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

将以下代码保存在其中

 mongo admin --eval "db.shutdownServer()"
Run Code Online (Sandbox Code Playgroud)

运行文件 mongostop.bat 并成功停止 mongo


Sha*_*ang 6

使用 mongod --shutdown

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

:d


小智 6

基于斯坦尼的回答:

mongo --eval "db.getSiblingDB('admin').shutdownServer();quit()"
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

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

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

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