初始安装后MongoDB服务无法启动

时间:2014-04-15 14:27:23

标签: linux mongodb fedora

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

11 个答案:

答案 0 :(得分:31)

Fedora 20对我有用:我们需要在每次启动时创建临时目录,并由systemd-tmpfiles处理。所以,创建一个文件/lib/tmpfiles.d/mongodb.conf并在其中加一行:

d /var/run/mongodb 0755 mongod mongod

似乎在重启时处理它;如果您不想立即重新启动,可以执行以下操作:

sudo systemd-tmpfiles --create mongodb.conf

(参见systemd-tmpfiles的手册页)

答案 1 :(得分:8)

我有同样的问题,我暂时解决了,禁用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

但重启机器后问题仍然存在。文件夹和文件消失。

答案 2 :(得分:7)

我花了一些时间研究这个,看起来好像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

答案 3 :(得分:5)

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

  

sudo service mongod start

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

答案 4 :(得分:1)

我在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

答案 5 :(得分:0)

我们需要创建由systemd-tmpfiles处理的pidfile /var/run/mongodb temp 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

答案 6 :(得分:0)

我遇到了同样的问题,当我修改我的mongod.conf如下并解决了问题〜

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

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

答案 7 :(得分:0)

我刚刚在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

它会再次运行。

答案 8 :(得分:0)

评论“mongo.conf”文件中的行。

<强> pidfilepath =的/ var /运行/ mongodb的/ mongod.pid

答案 9 :(得分:0)

以下命令已解决%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

答案 10 :(得分:0)

这在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