什么是在Mac OS X上停止mongodb的干净方法?

时间:2011-12-13 19:53:05

标签: macos mongodb launchd

我正在运行mongo 1.8.2并试图了解如何在Mac上彻底关闭它。

在我们的ubuntu服务器上,我可以通过以下方式从mongo shell干净地关闭mongo:

> use admin
> db.shutdownServer()

但是在我的Mac上,它并没有杀死mongod进程。输出显示它'应该'关闭但是当我ps -ef |时grep mongo它向我展示了一个活跃的过程。另外,我仍然可以打开一个mongo shell并查询我的dbs,就像它从未关闭一样。

我的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

我知道我可以杀死这个过程,但我想更干净地做到这一点。

9 个答案:

答案 0 :(得分:148)

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

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

然后手动启动mongod:

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

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

之后,db.shutdownServer()可以正常工作。

2014年2月22日添加:

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

brew services list

启动mongodb:

brew services start mongodb

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

brew services stop mongodb

<强>更新

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

答案 1 :(得分:26)

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

使用launchctl列出mongo作业:

launchctl list | grep mongo

停止mongo工作:

launchctl stop <job label>

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

启动mongo job:

launchctl start <job label>

答案 2 :(得分:18)

简单的方法是获取mongodb的进程ID并将其杀死。 请注意,请勿使用kill -9 pid,否则可能会对数据库造成损害。

所以, 1.得到mongodb的pid

$ pgrep mongo

你会得到mongo的pid,现在

$ kill

您也可以使用kill -15

答案 3 :(得分:4)

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

sudo port unload mongodb

再次开始。

sudo port load mongodb

答案 4 :(得分:3)

查看以下文档:

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

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

但是,如果您使用的是launchctl,则会根据安装方式的具体说明进行操作。

如果您使用的是Homebrew,则为launchctl stop homebrew.mxcl.mongodb

答案 5 :(得分:2)

这是一个古老的问题,但也是我在搜索时找到的问题。

如果您使用brew安装,那么解决方案实际上就是这个:

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

答案 6 :(得分:0)

如果您通过自制软件安装了mongodb社区服务器,则可以执行以下操作:

brew services list

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

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

redis             stopped

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

brew services stop mongodb
brew services start mongodb

答案 7 :(得分:0)

如果该服务是通过brew运行的,则可以使用以下命令将其停止:

brew services stop mongodb

答案 8 :(得分:0)

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

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