当前位置: 首页>>技术教程>>正文


Ubuntu上的MongoDB不会作为服务启动,也不会在日志中启动

, ,

问题描述

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

最佳解决方法

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

接下来你像这样运行它:

sudo mongod -f /etc/mongodb.conf

如果以前没有问题,那么现在就会出现 – 您已经使用普通配置(指向通常的dbpath和日志)作为root用户运行该过程。这意味着现在在用户正常的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或类似的方法进行验证。完成此操作后,您应该能够再次成功启动服务。

次佳解决方法

首先确认mongodb用户/组有权写入数据目录和日志文件:

$ 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,访问admin并发出shutdown命令:

$ ./mongo

> use admin

> db.shutdownServer()

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

第三种解决方法

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

第四种方法

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

sudo chown mongod:mongod mongodb-27017.sock  

我将其作为AWS Amazon Linux实例运行。我通过执行下面的mongod用户计算出来,然后研究错误代码。它可能对其他故障排除很有用。

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

第五种方法

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6310.html,未经允许,请勿转载。