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


84

我正在运行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

我知道我可以取消这个过程,但我想做得更干净一些。


您是如何开始的mongod?只是在壳?使用launchctl
dcrosta 2011年

您是否有日志中的任何信息?可能是MongoDB正在“自动重启”。您可能要使用来运行--logappend,尽管全新的日志文件清楚地表明进程已重新启动。
盖茨副总裁,

Answers:


171

可能是因为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

要停止mongodb的运行,请停止它:

brew services stop mongodb

更新资料

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


23
如果有人感兴趣,当前,如果您通过自制软件安装了mongodb,则实际上需要launchctl stop homebrew.mxcl.mongodb停止mongodb。
泰勒·布洛克

3
2014年9月,有一项brew关于brew services以下内容的弃用通知:$ brew services Warning: brew services is unsupported and will be removed soon.
Pablo Navarro

3
截至2014年12月,brew services已被删除。$ brew services Error: Unknown command: services
拥抱2014年

6
brew services现在可以作为用户定义的命令使用,并且可以通过以下命令进行安装:brew tap gapple/services
edufinn 2015年

1
启动mongodb服务后,我的节点服务器无法连接到它。但是,如果我从命令行启动mongodb,它会正常工作。我想这一定是端口问题。启动服务时如何设置端口?
pravin 2015年

35

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

列出带有launchctl的mongo作业:

launchctl list | grep mongo

停止mongo工作:

launchctl stop <job label>

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

开始mongo工作:

launchctl start <job label>

24

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

因此,1.获得mongodb的pid

$ pgrep mongo

你会得到蒙哥的pid,现在

$杀

您也可以使用kill -15


8

如果您已通过自制软件安装了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

4

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

sudo port unload mongodb

并重新开始。

sudo port load mongodb


1

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

如果与一起安装,brew则解决方案实际上是这样的:

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


0

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

brew services stop mongodb

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.