【问题标题】:MongoDB on Ubuntu won't start as a service, nothing in the logUbuntu 上的 MongoDB 不会作为服务启动,日志中没有任何内容
【发布时间】:2021-01-07 15:42:18
【问题描述】:

我在 Ubuntu 上运行 MongoDB 2.2,如果我运行:

sudo mongod

我收到一个错误,它找不到 /data/db,这不是数据库所在的位置。在 mongod.conf 中,数据库路径被指定为 Ubuntu 10gen 默认的 /var/lib/mongodb,这是 db 所在的位置。好像mongod 没有找到 conf 文件。所以当我跑步时:

sudo mongod -f /etc/mongodb.conf

服务器启动正常,输出记录到日志文件:/var/log/mongodb/mongodb.log。一切都很幸福。我可以切换到另一个 shell,登录 mongo shell,查看数据库并运行查询。

所以,我取消了它并尝试作为服务运行:

> sudo status mongodb
mongodb stop/waiting
> sudo start mongodb
mongodb start/running, process 10468

到目前为止看起来不错,但是 mongo 服务器没有启动。运行另一个:

> sudo status mongodb
mongodb stop/waiting
> mongo
MongoDB shell version: 2.2.0
connecting to: test
Sat Sep  1 19:07:43 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
exception: connect failed

“test”不是正确的数据库,日志文件中没有任何内容。

我不知道可能出了什么问题。我检查了暴发户脚本,它们看起来不错。 /etc/init/mongodb.conf 运行:

mongodb --exec  /usr/bin/mongod -- --config /etc/mongodb.conf

【问题讨论】:

    标签: mongodb ubuntu service


    【解决方案1】:

    好的,这一切都归结为权限,但让我们一步一步来。当您运行 sudo mongod 时,它根本不会加载配置文件,它实际上是从默认编译的开始 - 端口 27017database path 的 /data/db 等 - 这就是为什么你得到关于 not 的错误能够找到该文件夹​​。 “Ubuntu 默认”仅在您将其指向配置文件时使用(如果您开始使用 service 命令,这将在幕后为您完成)。

    接下来你像这样运行它:

    sudo mongod -f /etc/mongodb.conf
    

    如果之前没有问题,那么现在就会有 - 您已经运行了该进程,并以 root 用户身份使用您的正常配置(指向您通常的 dbpath 和日志)。这意味着现在该普通 MongoDB 文件夹中将有许多文件,用户:root:root 的组。

    当您再次尝试将其作为普通服务启动时,这将导致错误,因为 mongodb 用户(该服务将尝试以该用户身份运行)将无权访问那些 root:root 文件,最值得注意的是,它可能无法写入日志文件以向您提供任何信息。

    因此,要将其作为普通服务运行,我们需要修复这些权限。首先,确保 MongoDB 当前没有以 root 身份运行,然后:

    cd /var/log/mongodb
    sudo chown -R mongodb:mongodb .
    cd /var/lib/mongodb
    sudo chown -R mongodb:mongodb .
    

    这应该可以解决它(假设用户:组是mongodb:mongodb),但最好使用ls -al 或类似名称进行验证以确保。完成此操作后,您应该能够让服务再次成功启动。

    【讨论】:

    • 就像任何好的答案一样,只要你说出来,整个事情就会变得显而易见。谢谢!
    • 感谢您的回答,我遇到了完全相同的问题。
    • 花了我很多时间......而且这个工作..如果有人搜索这个,这会出现“无法启动 SYSV:Mongo 是可扩展的”,当执行建议的“systemctl status mongod”时.service”。
    • @AndreasReiff 我尝试更改您提到的文件夹的权限,但我仍然无法在我的 ubuntu 机器中启动 mongod。
    • `vinayak@vinayak-Lenovo-G500:~$ mongod 2016-03-04T09:31:29.942+0530 I CONTROL [initandlisten] MongoDB 开始:pid=3211 port=27017 dbpath= /data/db 64 位主机=vinayak-Lenovo-G500 2016-03-04T09:31:29.942+0530 I CONTROL [initandlisten] db 版本 v3.2.3 2016-03-04T09:31:29.942+0530 I CONTROL [initandlisten ] git 版本:b326ba837cf6f49d65c2f85e1b70f6f31ece7937 2016-03-04T09:31:29.942+0530 I CONTROL [initandlisten] OpenSSL
    【解决方案2】:

    首先确认 mongodb 用户/组有权写入 data 目录和 log 文件:

    $ sudo chown -R mongodb:mongodb /var/lib/mongodb/.

    $ sudo chown -R mongodb:mongodb /var/log/mongodb.log

    使用以下命令启动 MongoDB作为守护进程(后台进程):

    $ mongod --fork --dbpath /var/lib/mongodb/ --smallfiles --logpath /var/log/mongodb.log --logappend

    Shut Down MongoDB 进入 Mongo CLI,访问管理员并发出关闭命令:

    $ ./mongo

    > 使用管理员

    > db.shutdownServer()

    参考:http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo

    【讨论】:

    • mongod --shutdown 也会有序关机
    • sudo chown -R mongodb:mongodb /var/lib/mongodb/。做到了,谢谢!!
    【解决方案3】:

    我也有同样的问题。所以我去了 cd /var/lib/mongodb/ 并删除了 mongod.lock 文件 然后它对我有用。

    【讨论】:

    • 那不是为我做的 :(
    • 那就试试上面其他用户提供的解决方案……这只是一种情况……
    • 在此之后使用“sudo service mongodb start”启动它
    【解决方案4】:

    按照@nelsonic 的建议检查数据、日志和日志文件夹中的所有权限后,通过授予锁定 /tmp 文件夹中文件的权限解决了我的问题

    sudo chown mongod:mongod mongodb-27017.sock  
    

    我将它作为 AWS Amazon Linux 实例运行。 我通过以下方式以 mongod 用户身份执行,然后研究错误代码来解决这个问题。它可能对其他故障排除有用。

    sudo -S -u mongod mongod -f /etc/mongod.conf
    

    【讨论】:

      【解决方案5】:

      没有什么对我有用,然后我发现这是/tmp目录的权限问题:

      sudo chmod 1777 /tmp
      sudo chown root:root /tmp
      

      【讨论】:

      • 有不少权限问题会导致mongod 无法启动。这绝对是其中之一。
      【解决方案6】:

      试试这个命令:

      sudo chown mongodb /tmp/mongodb-27017.sock
      

      【讨论】:

        【解决方案7】:

        以上答案都不适合我。我终于通过调试初始化脚本弄清楚了:

        sudo bash -x /etc/init.d/mongodb start

        看到它向 mongod 传递了错误的配置路径。我只是将 /etc/init.d/mongodb 中的行从“CONF=/etc/mongodb.conf”更改为“CONF=/etc/mongod.conf”。版本 2 使用前者,安装版本 3 添加了新格式的 /etc/mongod.conf 但显然没有更新 init 脚本。

        更新:我现在有一个更奇怪的问题,init 脚本可以工作,但前提是我使用“sudo bash -x /etc/init.d/mongodb start”而不是“sudo service mongodb start”运行它。停止也是一样。

        【讨论】:

          【解决方案8】:

          我的 mongodb 在以 mongod 用户身份从命令行启动时启动,但不是作为用户 = mongod 的服务。 经过一个小时检查权限、服务定义、套接字......它是 SElinux !

          在 /etc/selinux/config 我从 enforcing 切换到 permissive 并重新启动。现在好了。

          【讨论】:

            【解决方案9】:

            在上述答案都不适合我之后,删除我的日志文件使 Mongo 恢复了生机。

            【讨论】:

              【解决方案10】:

              如今,如果您更新了 mongod 并且正在运行旧数据库,则可能会发生此错误。 Mongod 将默认使用 WiredTiger 引擎,您将拥有一个 mmapv1 数据库

              在 /etc/mongod.conf 中编辑引擎设置

              # engine: wiredTiger
              engine: mmapv1
              

              小心 - YAML 对空格敏感

              journalctl/systemd 不会看到这个问题。查看/var/log/mongodb/mongod.log中的mongod日志

              我认为您可以使用此处概述的步骤转换数据库

              https://docs.mongodb.com/manual/tutorial/change-standalone-wiredtiger/

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-12-24
                • 1970-01-01
                • 2018-12-09
                • 2016-11-27
                • 2018-12-14
                • 1970-01-01
                • 1970-01-01
                • 2018-06-30
                相关资源
                最近更新 更多