95

我正在运行 mongo 1.8.2 并尝试查看如何在 Mac 上彻底关闭它。

在我们的 ubuntu 服务器上,我可以使用以下命令从 mongo shell 干净地关闭 mongo:

> use admin
> db.shutdownServer()

但在我的 Mac 上,它不会杀死 mongod 进程。输出显示它“应该”关闭,但是当我 ps -ef | grep mongo 它向我展示了一个活跃的进程。此外,我仍然可以打开一个 mongo shell 并查询我的数据库,就像它从未关闭一样。

我的 db.shutdownServer() 在本地的输出是:

MongoDB shell version: 1.8.2
connecting to: test
> use admin                  
switched to db admin
> db.shutdownServer()
Tue Dec 13 11:44:21 DBClientCursor::init call() failed
Tue Dec 13 11:44:21 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1
server should be down...
Tue Dec 13 11:44:21 trying reconnect to 127.0.0.1
Tue Dec 13 11:44:21 reconnect 127.0.0.1 failed couldn't connect to server 127.0.0.1
Tue Dec 13 11:44:21 Error: error doing query: unknown shell/collection.js:150

我知道我可以杀死这个过程,但我想更干净地完成它。

4

9 回答 9

196

这可能是因为 launchctl 正在管理您的 mongod 实例。如果要启动和关闭 mongod 实例,请先卸载它:

launchctl unload -w ~/Library/LaunchAgents/org.mongodb.mongod.plist

然后手动启动mongod:

mongod -f path/to/mongod.conf --fork

您可以从中找到您的 mongod.conf 位置~/Library/LaunchAgents/org.mongodb.mongod.plist

在那之后,db.shutdownServer()会工作得很好。

2014 年 2 月 22 日添加:

如果你通过 homebrew 安装了 mongodb,homebrew 实际上有一个方便的brew services命令。要显示当前正在运行的服务:

brew services list

启动 mongodb:

brew services start mongodb-community

如果 mongodb 已经在运行,要停止它:

brew services stop mongodb-community

更新*

正如 edufinn 在评论中指出的那样,brew services现在可以作为用户定义的命令使用,并且可以使用以下命令进行安装:brew tap gapple/services.

于 2011-12-14T05:12:15.560 回答
39

如果您使用自制软件安装了 mongodb,则有一种更简单的方法:

使用 launchctl 列出 mongo 作业:

launchctl list | grep mongo

停止 mongo 工作:

launchctl stop <job label>

(对我来说这是launchctl stop homebrew.mxcl.mongodb

开始 mongo 工作:

launchctl start <job label>
于 2014-02-13T00:57:52.617 回答
25

简单的方法是获取 mongodb 的进程 ID 并杀死它。请注意不要为此使用 kill -9 pid,因为它可能会损坏数据库。

所以,1.获取mongodb的pid

$ pgrep mongo

你会得到 mongo 的 pid,现在

$杀

你也可以使用 kill -15

于 2016-02-17T10:16:23.167 回答
20

如果你已经通过 homebrew 安装了 mongodb 社区服务器,那么你可以这样做:

brew services list

这将列出当前的服务,如下所示:

Name              Status  User          Plist
mongodb-community started thehaystacker /Users/thehaystacker/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist

redis             stopped

然后您可以通过先停止并重新启动来重新启动mongodb:

brew services stop mongodb
brew services start mongodb
于 2019-12-29T06:47:18.280 回答
4

port我更喜欢使用命令本身来停止 MongoDB 服务器。

sudo port unload mongodb

并重新开始。

sudo port load mongodb
于 2014-01-13T23:25:39.593 回答
3

查看这些文档:

http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo#StartingandStoppingMongo-SendingaUnixINTorTERMsignal

如果您在终端中启动它,您应该可以使用ctrl + 'c'-- 这将完全关闭。

但是,如果您使用的是 launchctl,则有具体的说明,具体说明将根据安装方式而有所不同。

如果您使用的是 Homebrew,它将是launchctl stop homebrew.mxcl.mongodb

于 2011-12-13T22:52:46.993 回答
2

其他人提供的解决方案曾经为我工作,但不再为我工作,如下所示。

brew services stop mongodb
brew services start mongodb

brew services list

Name              Status  User      Plist
mongodb-community started XXXXXXXXX /Users/XXXXXXXXX/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist

所以我使用mongodb-community而不是对mongodb我有用

brew services stop mongodb-community
brew services start mongodb-community
于 2020-10-28T07:49:35.727 回答
1

这是一个老问题,但我在搜索时也发现了它。

如果您安装了,brew那么解决方案实际上是这样的:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

于 2015-10-04T02:11:00.350 回答
0

如果服务正在通过 brew 运行,您可以使用以下命令将其停止:

brew services stop mongodb
于 2020-07-20T06:39:54.590 回答