我需要能够在 cli 上启动/停止 MongoDB。开始很简单:
./mongod
但是要停止 mongo DB,我需要先运行 open mongo shell,然后键入两个命令:
$ ./mongo 使用管理员 db.shutdownServer()
所以我不知道如何在一行中停止 mongo DB。有什么帮助吗?
Starting and Stopping MongoDB 包含在 MongoDB 手册中。它解释了通过 shell、cli、驱动程序等停止 MongoDB 的各种选项。它还详细说明了错误停止 MongoDB 的风险(例如数据损坏)并讨论了不同的终止信号。
此外,如果您使用 Ubuntu 或 Debian 的包管理器安装了 MongoDB,那么您可以停止 mongodb(当前是 ubuntu 中的 mongod),如下所示:
新贵:sudo service mongod stop
Sysvinit:sudo /etc/init.d/mongod stop
或在 Mac OS X
使用 $ top 查找 mongod 进程的 PID
通过 $ kill
或者在基于 Red Hat 的系统上:
服务 mongod 停止
或者如果您已安装为名为 MongoDB
的服务,则在 Windows 上:
净停止 MongoDB
如果没有作为服务安装(从 Windows 7+ 开始),您可以运行:
taskkill /f /im mongod.exe
要详细了解不正常关机的问题、如何最好地避免这种情况以及在不正常关机的情况下该怎么做,请参阅:Recover Data after an Unexpected Shutdown。
如果您确实想要与原始问题中的命令等效的一行,则可以使用别名:
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 documentation 停止信号。可以使用以下命令之一(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
注意:如果数据库以其他用户身份运行,但您具有管理权限,则您必须使用 sudo
调用上述命令才能运行它们。例如:
sudo pkill mongod
sudo pkill -2 mongod
附言
注意:我使用信号是因为 mongod --shutdown
,虽然在当前的 MongoDB documentation 中提到,但在我的机器上不起作用(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
:-)
使用mongod --shutdown
根据官方文档:manage-mongodb-processes/
:D
创建一个名为 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 is registered as a service。
请利用您的操作系统提供的任务管理器来获得快速简便的解决方案。以下是 Windows 10 的屏幕截图。右键单击突出显示的进程并选择停止。如果已经停止,请选择开始。
https://i.stack.imgur.com/RWS8A.png
请注意:在内部,命令执行的操作与您必须使用 Windows/您的操作系统提供的 GUI(任务管理器)手动执行的操作相同。不过,这种方法可用于学习/练习目的,您不会因此而被阻止。
CTRL + C
在 Windows 命令行上
不定期副业成功案例分享
sudo service mongodb [start|stop|restart|status]
。sudo service stop mongodb
导致:停止:无法识别的服务