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

我需要能够在 cli 上启动/停止 MongoDB:

。/蒙神

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

$./mongo

使用管理

关闭服务器()

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

474734 次浏览

我在 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

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

此外,如果您使用 UbuntuDebian的软件包管理器安装 MongoDB,那么您可以按以下方式停止 MongoDB (目前在 ubuntu 中是 mongod) :

  • 暴发户: sudo service mongod stop

  • Sysvinit: sudo /etc/init.d/mongod stop

或者 Mac OS X

或者在基于 红帽子的系统上:

  • service mongod stop

或者在 窗户上,如果您已经安装了一个名为 MongoDB的服务:

  • net stop MongoDB

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

  • taskkill /f /im mongod.exe

要了解更多关于不清洁关机的问题,如何最好地避免这种情况,以及在发生不清洁关机的情况下应该做什么,请参阅: 在意外关闭后恢复数据

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

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

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

使用命令行启动或停止 mongodb 服务的一行代码;

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

我自己用这个,确实管用。

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

Ctrl-C

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

> use admin
> db.shutdownServer();

否则,可以使用 kill 等命令来发送 信号。如果蒙神有10014作为它的 PID,命令将是

kill -2 10014

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

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

我就这么做了:

quit();

请注意,我使用的是 mongo 3.0。

蒙戈

从给定的命令来看,我认为你是在 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

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

使用 mongod --shutdown

根据官方文件 Manage-mongodb-processes/

校对: D

窗户

在 PowerShell 中,它是: Stop-Service MongoDB

然后重新开始: Start-Service MongoDB

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

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

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

保存下面的代码

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

运行文件 mongostop.bat,就可以成功地阻止 mongo

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

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

注意: 如果 DB 作为另一个用户运行,但是您拥有管理权限,那么您必须使用 sudo调用上述命令,以便运行它们。例如:

sudo pkill mongod
sudo pkill -2 mongod

附言

注意: 我之所以使用信号,是因为 mongod --shutdown虽然在当前的 MongoDB 文档中提到过,但在我的机器上不能正常工作(macOS,mongodb v3.4.10,安装了 homebrew) :

Error parsing command line: unrecognised option '--shutdown'

更新2022-05-10

同时,选项 --shutdown在文档中标记为“ Supported on Linux only”。

又及

(特定于 macOS)在任何人怀疑之前: 不,我不能用命令停止它

brew services stop mongodb

因为不是我开始的

brew services start mongodb

我用一个自定义命令行启动了 mongod: -)

CTRL + C

在 windows 命令行上

基于 Stennie 的回答:

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

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

我还想添加上下文——我正在启动和停止 monGod 作为其他代码的测试用例的一部分,因此注册为服务不适合用例。我希望最终能够得到一些可以在所有平台上运行的东西(目前已经在 Windows 中进行了测试)。我用的是蒙神3.6.9

我的特殊情况是:

前情提要:

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

现在,想要停止 mongod

并转交官方文件 停止蒙古进程,已尝试:

(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)前一个开始命令添加——关闭:

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

以及 终于,真正阻止蒙神的是:

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

直到现在,根本原因仍然不明。

希望上面的解决方案对你有用。

请利用您的操作系统提供的 任务管理器为快速和简单的解决方案。下面是 Windows10的屏幕截图。右键单击突出显示的进程并选择 别说了。如果已经停止,则选择 开始

enter image description here

请注意: 在内部,这些命令正在做同样的事情,你必须使用一个由 Windows/你的操作系统提供的 GUI (任务管理器)手动完成。不过,这种方法可以用于学习/练习的目的,并且你不会因此而受到阻碍。

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

首先:

brew services start mongodb-community

停止:

brew services stop mongodb-community

开始 Sudo/etc/init.d/mongodb start

停止 Sudo/etc/init.d/mongodb 停止