我需要能够在cli上启动/停止MongoDB。这很简单:
./ mongod的
但要停止mongo DB,我需要首先运行open mongo shell然后键入两个命令:
$ ./mongo
使用管理员
db.shutdownServer()
所以我不知道如何在一行中停止mongo DB。有什么帮助吗?
答案 0 :(得分:195)
Starting and Stopping MongoDB。它解释了通过shell,cli,驱动程序等停止MongoDB的各种选项。它还详细说明了错误地停止MongoDB的风险(例如数据损坏)和谈论不同的kill信号。
此外,如果您使用Ubuntu或Debian的软件包管理器安装了MongoDB,则可以按如下方式停止mongodb(以前为mongod):
Upstart:sudo service mongodb stop
Sysvinit:sudo /etc/init.d/mongodb stop
使用$ top
按$ kill <PID>
(the Mongo docs have more info on this)
或基于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)
答案 6 :(得分:4)
使用命令行启动或停止mongodb服务的一个内衬;
NET START MONGODB
NET STOP MONGODB
我自己使用它,它确实有效。
答案 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)
答案 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 。如果已停止,请选择开始。
请注意:在内部,这些命令所执行的操作与使用Windows /您的操作系统提供的GUI(任务管理器)手动执行的操作相同。不过,这种方法可用于学习/练习目的,因此不会因此而受到阻碍。
答案 18 :(得分:0)
开始 sudo /etc/init.d/mongodb start
停止 sudo /etc/init.d/mongodb 停止