【问题标题】:What's a clean way to stop mongod on Mac OS X?在 Mac OS X 上停止 mongod 的干净方法是什么?
【发布时间】:2012-01-19 16:26:42
【问题描述】:

我正在运行 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?
  • 您有任何日志信息吗?可能是 MongoDB 正在“自动重启”。您可能希望使用--logappend 运行,尽管全新的日志文件清楚地表明该进程已重新启动。

标签: macos mongodb launchd


【解决方案1】:

这可能是因为 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 日添加:

如果你通过 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

【讨论】:

  • 如果有人感兴趣,目前,如果您通过自制软件安装了 mongodb,您实际上需要执行 launchctl stop homebrew.mxcl.mongodb 来停止 mongodb。
  • 截至 2014 年 9 月,brew 中有关于 brew services 的弃用通知:$ brew services Warning: brew services is unsupported and will be removed soon.
  • 截至 2014 年 12 月,brew services 已被删除。 $ brew services Error: Unknown command: services
  • brew services 现在可以作为用户定义的命令使用,并且可以使用以下命令进行安装:brew tap gapple/services
  • 启动mongodb服务后,我的节点服务器无法连接。但是,如果我从命令行启动 mongodb,它工作正常。我猜应该是端口问题。启动服务时如何设置端口?
【解决方案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

【讨论】:

    【解决方案3】:

    如果你已经通过 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
    

    【讨论】:

      【解决方案4】:

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

      brew services stop mongodb
      

      【讨论】:

        【解决方案5】:

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

        所以, 1.获取mongodb的pid

        $ pgrep mongo

        现在你会得到 mongo 的 pid

        $杀

        你也可以使用 kill -15

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

            【解决方案7】:

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

            使用 launchctl 列出 mongo 作业:

            launchctl list | grep mongo
            

            停止 mongo 工作:

            launchctl stop <job label>
            

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

            开始 mongo 工作:

            launchctl start <job label>
            

            【讨论】:

              【解决方案8】:

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

              sudo port unload mongodb
              

              然后重新开始。

              sudo port load mongodb
              

              【讨论】:

                【解决方案9】:

                查看这些文档:

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

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

                但是,如果您使用的是 launchctl,则有具体说明,具体说明会因安装方式而异。

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

                【讨论】:

                  猜你喜欢
                  • 2011-08-01
                  • 2010-09-10
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-01-17
                  • 2016-09-21
                  • 2012-04-21
                  相关资源
                  最近更新 更多