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

emi*_*zel 73 macos launchd mongodb

我正在运行mongo 1.8.2并试图看看如何在Mac上干净利落地关闭它.

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

> use admin
> db.shutdownServer()
Run Code Online (Sandbox Code Playgroud)

但在我的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
Run Code Online (Sandbox Code Playgroud)

我知道我可以杀死这个过程,但我想干得更干净.

Jam*_*hen 156

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

launchctl unload -w ~/Library/LaunchAgents/org.mongodb.mongod.plist
Run Code Online (Sandbox Code Playgroud)

然后手动启动mongod:

mongod -f path/to/mongod.conf --fork
Run Code Online (Sandbox Code Playgroud)

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

在那之后,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 stop homebrew.mxcl.mongodb`来停止mongodb. (23认同)
  • `brew services`现在可以作为用户定义的命令使用,可以使用以下命令安装:`brew tap gapple/services`. (6认同)
  • 截至2014年9月,'brew`中有关于'brew services`的弃用通知:`$ brew services警告:brew服务不受支持,将很快删除. (3认同)
  • 截至2014年12月,"brew services"已被删除.`$ brew services错误:未知命令:services` (3认同)

Rap*_*ael 26

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

使用launchctl列出mongo作业:

launchctl list | grep mongo
Run Code Online (Sandbox Code Playgroud)

停止mongo工作:

launchctl stop <job label>
Run Code Online (Sandbox Code Playgroud)

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

启动mongo工作:

launchctl start <job label>
Run Code Online (Sandbox Code Playgroud)


小智 20

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

所以,1.得到mongodb的pid

$ pgrep mongo

你会得到mongo的pid,现在

$ kill

你也可以使用kill -15


the*_*ker 15

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

brew services list
Run Code Online (Sandbox Code Playgroud)

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

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

redis             stopped
Run Code Online (Sandbox Code Playgroud)

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

brew services stop mongodb
brew services start mongodb
Run Code Online (Sandbox Code Playgroud)


Raf*_*afa 5

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

sudo port unload mongodb
Run Code Online (Sandbox Code Playgroud)

并重新开始。

sudo port load mongodb
Run Code Online (Sandbox Code Playgroud)