我需要能够在 cli 上启动/停止 MongoDB。开始很简单:
./mongod
但是要停止 mongo DB,我需要先运行 open mongo shell,然后键入两个命令:
$ ./mongo
使用管理员
db.shutdownServer()
所以我不知道如何在一行中停止 mongo DB。有什么帮助吗?
我需要能够在 cli 上启动/停止 MongoDB。开始很简单:
./mongod
但是要停止 mongo DB,我需要先运行 open mongo shell,然后键入两个命令:
$ ./mongo
使用管理员
db.shutdownServer()
所以我不知道如何在一行中停止 mongo DB。有什么帮助吗?
MongoDB 手册中介绍了启动和停止 MongoDB。它解释了通过 shell、cli、驱动程序等停止 MongoDB 的各种选项。它还详细说明了错误停止 MongoDB 的风险(例如数据损坏)并讨论了不同的终止信号。
此外,如果您使用Ubuntu或Debian的包管理器安装了 MongoDB,那么您可以停止 mongodb(当前是 ubuntu 中的 mongod),如下所示:
暴发户:sudo service mongod stop
系统:sudo /etc/init.d/mongod stop
或者在Mac OS X上
使用查找 mongod 进程的 PID$ top
$ kill <PID>
通过(Mongo 文档对此有更多信息)终止进程
或者在基于Red Hat的系统上:
service mongod stop
或者在Windows上,如果您已安装为名为的服务MongoDB
:
net stop MongoDB
如果没有作为服务安装(从 Windows 7+ 开始),您可以运行:
taskkill /f /im mongod.exe
要了解有关非正常关机问题的更多信息、如何最好地避免这种情况以及在非正常关机的情况下如何处理,请参阅:意外关机后恢复数据。
如果您确实想要与原始问题中的命令等效的一行,则可以使用别名:
mongo --eval "db.getSiblingDB('admin').shutdownServer()"
Mark 关于通过服务启动和停止 MongoDB 的回答是更典型(也是推荐的)管理方法。
mongod --dbpath /path/to/your/db --shutdown
更多官方信息: http: //docs.mongodb.org/manual/tutorial/manage-mongodb-processes/
如果服务器在终端中作为前台进程运行,可以通过按
Ctrl-C
另一种彻底关闭正在运行的服务器的方法是使用 shutdown 命令,
> use admin
> db.shutdownServer();
否则,可以使用 kill 之类的命令来发送信号。如果 mongod 的 PID 为 10014,则命令为
kill -2 10014
我遵循了官方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
自定义命令行开始:-)
创建一个名为 mongostop.bat 的文件
将以下代码保存在其中
mongo admin --eval "db.shutdownServer()"
运行文件 mongostop.bat ,你成功地停止了 mongo
我的特殊情况是:
以前通过以下方式启动 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
直到现在,根本原因:仍然未知......
希望以上解决方案对您有用。
一个使用命令行启动或停止 mongodb 服务的衬垫;
NET START MONGODB
NET STOP MONGODB
我自己用这个,它确实有效。
基于 stennie 的回答:
mongo --eval "db.getSiblingDB('admin').shutdownServer();quit()"
我发现 mongo 在服务器关闭后试图重新连接到数据库,这会导致延迟和错误消息。在关机后添加 quit() 可以加快速度并减少消息,但仍然存在。
我还想添加上下文 - 我正在启动和停止 mongod 作为其他代码测试用例的一部分,因此注册为服务不适合用例。我希望最终得到可以在所有平台上运行的东西(现在在 Windows 中进行了测试)。我正在使用 mongod 3.6.9
根据给定的命令,我认为您使用的是 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
使用自制软件(推荐方式):
开始:
brew services start mongodb-community
停止:
brew services stop mongodb-community
在 Mac 的终端窗口中,按 control+c
我在 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
在 PowerShell 中,它是:Stop-Service MongoDB
然后重新开始:Start-Service MongoDB
要验证它是否已启动,请运行:net start | findstr MongoDB
。
注意:以上假设MongoDB 已注册为服务。
启动 sudo /etc/init.d/mongodb start
停止 sudo /etc/init.d/mongodb stop
CTRL + C
在 Windows 命令行上