Answers:
启动和停止MongoDBMongoDB手册中介绍了。它解释了通过外壳,cli,驱动程序等停止MongoDB的各种选项。还详细介绍了错误地停止MongoDB的风险(例如数据损坏),并讨论了不同的终止信号。
另外,如果您已使用Ubuntu或Debian的软件包管理器安装了MongoDB,则可以按以下方式停止mongodb(当前在ubuntu中为mongod):
暴发户: sudo service mongod stop
Sysvinit: sudo /etc/init.d/mongod stop
使用以下命令查找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的答案是更典型(推荐)的管理方法。
start C:\mongodb\bin\mongod.exe --config C:\net2\primary1-pc\mongod.cfg start C:\mongodb\bin\mongod.exe --config C:\net2\secondary1-pc\mongod.cfg ...
,然后有shutdown.bat C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27017 C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27018 C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27019 ...
net stop MongoDB
不可靠,因此我使用了类似的方法:mongo admin --eval "db.shutdownServer()"
。干杯!
mongod --dbpath /path/to/your/db --shutdown
官方的更多信息:http : //docs.mongodb.org/manual/tutorial/manage-mongodb-processes/
mongod v3.4.10
:Error parsing command line: unrecognised option '--shutdown'
:-(
db.shutdownServer({force:1,timeoutSecs:0})
会阻止将剩余数据刷新到辅助数据库。您可能并不总是想要那个。
如果服务器在终端中作为前台进程运行,则可以通过按
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
(mongod
例如SIGKILL)终止实例。
如果您有多个实例在运行,或者您不关心PID,则可以使用pkill
将信号发送到所有正在运行的mongod
进程的方法:
pkill mongod
要么
pkill -2 mongod
或者,更安全的是,仅对属于您的流程更安全:
pkill -U $USER mongod
要么
pkill -2 -U $USER mongod
PS
注意:我诉诸于此选项,因为mongod --shutdown
尽管在当前的MongoDB文档中提到了,但奇怪的是,它在我的机器上不起作用(macOS,mongodb v3.4.10,安装了homebrew
):
Error parsing command line: unrecognised option '--shutdown'
PPS
(特定于macOS)在任何人都想知道之前:不,我无法使用command停止它,
brew services stop mongodb
因为我没有使用来启动它
brew services start mongodb
。
我从mongod
一个自定义命令行开始:-)
我的特殊情况是:
以前通过以下方式启动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
直到现在,根本原因:仍然未知...
希望以上解决方案对您有用。
创建一个名为mongostop.bat的文件
将以下代码保存在其中
mongo admin --eval "db.shutdownServer()"
运行文件mongostop.bat,您就成功停止了mongo
一排使用命令行启动或停止mongodb服务;
NET START MONGODB
NET STOP MONGODB
我自己使用它,它确实起作用。
使用自制程序(推荐方式):
开始:
brew services start mongodb-community
停止:
brew services stop mongodb-community
我在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已注册为service。
sudo service mongodb [start|stop|restart|status]
。sudo service stop mongodb
结果是:停止:无法识别的服务