【问题标题】:MongoDB Service Will Not Start After Initial Setup初始设置后 MongoDB 服务不会启动
【发布时间】:2019-02-21 22:04:22
【问题描述】:

我正在运行 Fedora 20 并按照官方文档中的 Red Hat installation guide 安装了 MongoDB。我第一次能够将mongod 守护程序作为服务运行而没有错误,但是当我关闭我的机器并返回时,该服务由于某些故障而拒绝启动。

在成功运行后列出的日志中,我看到:

***** SERVER RESTARTED *****
ERROR: Cannot write pid file to /var/run/mongodb/mongod.pid: No such file or directory

如果我尝试手动启动 mongod 或运行 mongod --repair,我会在启动失败时收到此消息:

ERROR: dbpath (/data/db) does not exist.
Create this directory or give existing directory in --dbpath.

这很奇怪,因为我在/etc/mongod.conf 的配置文件中,数据库路径的设置如下:

dbpath=/var/lib/mongo

最后,如果我运行这个命令:

mongod --dbpath /var/lib/mongo

守护程序启动得很好。但是,我无法复制启动服务时的无错误行为。

谁能告诉我到底出了什么问题以及如何开始将mongod 作为服务运行?

编辑

如果我运行mongod --config /etc/mongod.conf,我会收到此消息:

about to fork child process, waiting until server is ready for connections. forked process: 2702 ERROR: child process failed, exited with error number 1

/var/run/mongodb 目录不存在,所以我创建并分配给 mongod 用户。不幸的是,这并没有太大的区别。

我的/var/log/mongodb/mongod.log 显示此消息:

[initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /var/lib/mongo/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating

【问题讨论】:

  • 您需要指定配置文件才能让 mongod 读取它。试试mongod --config /etc/mongod.conf。对于最初的问题,/var/run/mongodb 目录是否存在?如果不是(我假设是这样),请尝试使用权限 666(或 644 并将其 chown 给守护程序用户)创建它,然后尝试重新启动它?
  • Permission denied 表示您搞砸了权限。尝试将每个相关的目录/文件返回给 mongod 用户。
  • 原来/etc/mongod.conf 归根所有。我改变了它,但仍然没有继续配置。
  • 所以,有两件事要检查: 1. ps aux|grep mongo 确保没有运行 mongod 实例。如果没有,2.检查目录/var/lib/mongo的权限
  • 没有mongod进程,/var/lib/mongo/有666 chmod权限。

标签: linux mongodb fedora


【解决方案1】:

在 Fedora 20 上对我有用的是:我们需要在每次启动时创建临时目录,这由 systemd-tmpfiles 处理。因此,创建一个文件 /lib/tmpfiles.d/mongodb.conf 并在其中放入一行:

d /var/run/mongodb 0755 mongod mongod

这似乎在重新启动时处理它;如果您不想立即重新启动,可以使用以下命令执行:

sudo systemd-tmpfiles --create mongodb.conf

(查看 systemd-tmpfiles 的手册页)

【讨论】:

  • 这也适用于 CentOS 7.2 和 MongoDB 3.4。谢谢。
  • 你是救星!!我希望我可以投票支持您在 centos 7.2 上的更多工作
【解决方案2】:

我也有同样的问题,暂时解决了,禁用SELinux,重启机器,去掉mongod.lock:

#rm /var/lib/mongo/mongod.lock

通过创建文件/var/run/mongodb/mongo.pid(如配置文件/etc/mongod.conf中所述):

#mkdir /var/run/mongodb
#touch /var/run/mongodb/mongod.pid

并授予 777 权限:

#chmod 777 /var/run/mongodb/mongod.pid 

开始 mongo:

#service mongod start

但是重启机器后问题依旧。文件夹和文件消失。

【讨论】:

  • 这几乎就是我在初始安装时发生的事情。我发现必须禁用 SELinux 才能完成这项工作,这很麻烦。我确信这是一个权限问题,但鉴于每个相关文件/文件夹都被 chown 到 mongod,因此无法查明来源。
  • 我在 openSuse 13.1 上遇到了同样的问题,@Pori - 你是如何解决这个问题的?不太了解 SELinux 的东西...
  • 你能看到serverfault.com/questions/1026257/…@Deoxyseia先生
【解决方案3】:

我花了一段时间研究这个问题,似乎 pid 文件夹和文件权限不适用于默认守护进程。

我遇到的最简单的解决方案是禁用 pid 文件,只需在配置文件的行前添加 # 即可。

vi /etc/mongod.conf

找到显示 pidfilepath=/var/run/mongodb/mongod.pid 的行并相应地进行更改。

# pidfilepath=/var/run/mongodb/mongod.pid

有关评论的信息,请查看此处。 http://docs.mongodb.org/manual/reference/configuration-options/#processManagement.pidFilePath

【讨论】:

    【解决方案4】:

    如果您使用以下方式启动 mongod 作为服务:

    sudo service mongod 启动

    确保在 mongod.conf 中为 logpath、dbpath 和 pidfilepath 定义的目录存在并且归 mongod:mongod 所有。

    【讨论】:

      【解决方案5】:

      我在 OpenSuse 13.2 上运行 mongodb 3.0.4 时遇到了同样的问题,我发现 /var/run 下的 mongod 目录丢失了。如果我手动创建目录,它会在重启后消失。

      我通过在我的 /etc/init.d/mongod 启动脚本中添加以下行来解决它:

      mkdir -p /var/run/mongod  
      chown $MONGO_USER:$MONGO_GROUP /var/run/mongod
      

      【讨论】:

      • 实际上,虽然这可行,但维塔莉的回答看起来是正确的程序。
      【解决方案6】:

      这在 Ubuntu 中对我有用:

      sudo kill $(sudo lsof -t -i:27017) 
      sudo rm -rf /tmp/mongodb-27017.sock
      sudo rm -f /var/lib/mongo/mongod.lock
      sudo rm -f /var/run/mongodb/mongod.pid
      sudo mkdir -p  /var/run/mongodb/
      sudo touch /var/run/mongodb/mongod.pid
      sudo chown -R  mongodb:mongodb /var/run/mongodb/
      sudo chown mongodb:mongodb /var/run/mongodb/mongod.pid
      sudo service mongod start
      

      【讨论】:

        【解决方案7】:

        我遇到了同样的问题,当我修改我的 mongod.conf 并解决问题时~

        port=27017
        dbpath=/usr/local/mongodb/data/db/
        logpath=/usr/local/mongodb/logs
        fork = true
        

        提示:logpath 是日志文件而不是文件夹。

        【讨论】:

          【解决方案8】:

          我刚刚在 ubuntu 上遇到了类似的问题。遇到了几乎所有的 ERROR 提示,比如

          child process failed, exited with error number 1
          

          child process failed, exited with error number 100

          [signalProcessingThread] got signal 2 (Interrupt: 2), will terminate after current cmd ends

          很多次我删除了Mongodb并尝试重新安装,但问题仍然存在....

          最后我是这样的: 先备份你的数据,然后用

          删除 Mongodb
          #sudo apk-get autoremove mongodb-org
          

          找出所有与mongodb相关的文件:

          /#find -name mongo*
          

          用“rm”或“rmdir”将它们全部删除,包括/var/cache/...中的包和everthing。

          然后像第一次一样重复安装:

          #echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
          #sudo apt-get update
          #sudo apt-get install -y mongodb-org
          

          它将再次运行。

          【讨论】:

            【解决方案9】:

            在“mongo.conf”文件的行下方评论。

            pidfilepath=/var/run/mongodb/mongod.pid

            【讨论】:

              【解决方案10】:

              为 cent os 解决的以下命令

              错误

               service mongod status
               Error starting mongod. /var/run/mongodb/mongod.pid exists
              

              修正者:

                 rm /var/lib/mongo/mongod.lock
                 chown -R mongod:mongod /var/log/mongodb/
                 chown -R mongod:mongod /var/run/mongodb/
                 chown -R mongod:mongod /var/lib/mongo/
                 chmod 777 /var/run/mongodb/mongod.pid
              
                 mongod --dbpath /var/lib/mongo
              

              【讨论】:

                【解决方案11】:

                我们需要创建由 systemd-tmpfiles 处理的 pidfile /var/run/mongodbtemp dir 位置。因此,以 root 身份创建文件 /lib/tmpfiles.d/mongodb.conf:

                lnx#> sudo su
                lnx#> cd /lib/tmpfiles.d
                lnx#> echo “d /var/run/mongodb 0755 mongod mongod” > mongodb.conf

                然后重新启动或运行此命令以激活该临时目录:

                lnx#>sudo systemd-tmpfiles --create mongodb.conf

                启动mongod服务:

                lnx#> sudo systemctl start mongod.service

                参考书目: Fedora And Mongodb · l33tsource

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2015-12-24
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-08-16
                  • 2016-11-14
                  • 1970-01-01
                  相关资源
                  最近更新 更多