什么是在Mac OS X上停止mongod的干净方式?

我正在运行mongo 1.8.2并试图看看如何在Mac上彻底closures它。

在我们的Ubuntu服务器上,我可以用mongo shell彻底closuresmongo:

> 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 

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

这可能是因为launchctl正在pipe理你的mongod实例。 如果你想启动和closuresmongod实例,首先卸载:

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

然后手动启动mongod:

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

你可以从~/Library/LaunchAgents/org.mongodb.mongod.plistfind你的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

如果你用自制软件安装了mongodb,有一个更简单的方法:

使用launchctl列出mongo作业:

 launchctl list | grep mongo 

停止mongo工作:

 launchctl stop <job label> 

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

开始mongo工作:

 launchctl start <job label> 

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

所以,1.获得mongodb的pid

$ pgrep mongo

你会得到mongo的pid,现在

$ kill

你也可以使用kill -15

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

 sudo port unload mongodb 

并重新开始。

 sudo port load mongodb 

看看这些文档:

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

如果你在一个terminal上启动它,你应该可以使用ctrl + 'c' – 这样做会彻底closures。

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

如果你使用的是自制launchctl stop homebrew.mxcl.mongodb那么将会是launchctl stop homebrew.mxcl.mongodb

这是一个古老的问题,但也是我在search时发现的一个问题。

如果您使用brew进行安装,那么解决scheme实际上是这样的:

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