如何在一个命令中停止mongoDB

时间:2012-08-02 09:43:55

标签: mongodb

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

  

./ mongod的

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

  

$ ./mongo

     

使用管理员

     

db.shutdownServer()

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

19 个答案:

答案 0 :(得分:195)

MongoDB手册中介绍了

Starting and Stopping MongoDB。它解释了通过shell,cli,驱动程序等停止MongoDB的各种选项。它还详细说明了错误地停止MongoDB的风险(例如数据损坏)和谈论不同的kill信号。

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

  • Upstart: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

要了解有关不洁关机问题的更多信息,如何最好地避免这种情况以及在发生不干净关机时该怎么做,请参阅:Recover Data after an Unexpected Shutdown

答案 1 :(得分:91)

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

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

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

答案 2 :(得分:43)

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

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

答案 3 :(得分:25)

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

来完成
Ctrl-C

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

> use admin
> db.shutdownServer();

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

kill -2 10014

答案 4 :(得分:11)

我跟随官方MongoDB documentation跟踪信号。可以使用以下命令之一(PID表示Process ID进程的mongod

kill PID

发送信号15(SIGTERM)或

kill -2 PID

发送信号2(SIGINT)。

  

来自MongoDB documentation的警告:
  切勿使用kill -9(即SIGKILL)终止mongod个实例。

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

pkill mongod

pkill -2 mongod

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

pkill -U $USER mongod

pkill -2 -U $USER mongod

PS
注意:我采用了这个选项,因为mongod --shutdown虽然在当前MongoDB documentation中提到,但奇怪的是在我的机器上不起作用(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 :(得分:6)

使用mongod --shutdown

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

:D

答案 6 :(得分:4)

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

  1. 开始使用服务:NET START MONGODB
  2. 停止服务使用:NET STOP MONGODB
  3. 我自己使用它,它确实有效。

答案 7 :(得分:3)

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

将以下代码保存在其中

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

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

答案 8 :(得分: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 

答案 9 :(得分:1)

我只是这样做了:

quit();

请注意我使用的是mongo 3.0。

Mongo

答案 10 :(得分:1)

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

答案 11 :(得分:1)

CTRL + C

Windows命令行上的

答案 12 :(得分:1)

Building on the answer from stennie:

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

I found that mongo was trying to reconnect to the db after the server shut down, which would cause a delay and error messages. Adding quit() after shutdown speeds it up and reduces the messages, but there is still one.

I also want to add context - I'm starting and stopping mongod as part of test cases for other code, so registering as a service does not fit the use case. I am hoping to end up with something that runs on all platforms (this tested in windows right now). I'm using mongod 3.6.9

答案 13 :(得分:1)

我的特殊情况是:

以前通过以下方式启动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

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

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

答案 14 :(得分:1)

使用自制程序(推荐方式):

要开始:

brew services start mongodb-community

要停止:

brew services stop mongodb-community

答案 15 :(得分: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

答案 16 :(得分:0)

在PowerShell中,它是:Stop-Service MongoDB

然后再次启动它:Start-Service MongoDB

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

注意:上面假设为MongoDB is registered as a service

答案 17 :(得分:0)

请充分利用操作系统提供的任务管理器,以提供快速简便的解决方案。以下是Windows 10的/针对Windows 10的屏幕截图。右键单击突出显示的进程,然后选择 stop 。如果已停止,请选择开始

enter image description here

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

答案 18 :(得分:0)

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

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