Ubuntu上的MongoDB不会作为服务启动,日志中没有任何东西

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

sudo mongod 

我得到一个错误,它无法find/数据/数据库,这不是数据库的地方。 在mongod.conf中,数据库path被指定为数据库所在的Ubuntu 10gen default /var/lib/mongodb 。 看起来像mongod没有findconf文件。 所以当我运行时:

 sudo mongod -f /etc/mongodb.conf 

服务器启动正常,输出logging到日志文件: /var/log/mongodb/mongodb.log 。 一切都很开心 我可以切换到另一个shell,login到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 

“testing”不是正确的数据库,并且日志文件中不显示任何内容。

我不知道什么是错的。 我检查了新贵脚本,他们似乎很好。 /etc/init/mongodb.conf运行:

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

好的,这一切归结为权限,但让我们一步一步来。 当你运行sudo mongod它根本不会加载configuration文件,它实际上是从默认编译开始的 – 端口27017 ,/ data / db的数据库path等 – 这就是为什么你得到了无法find的错误该文件夹。 只有在configuration文件中指定“Ubuntu默认”时(如果你开始使用服务命令,这是在幕后完成的)。

接下来你是这样运行的:

 sudo mongod -f /etc/mongodb.conf 

如果之前没有问题,那么现在就会有 – 你已经用正常的configuration(指向你通常的dbpath和日志)以root用户身份运行进程。 这意味着现在在正常的MongoDB文件夹中会有多个文件,其中包含root:root用户:group。

当您尝试以普通服务的forms再次启动它时,这将导致错误,因为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 ),尽pipe最好用ls -al或类似的validation来确认。 一旦完成,你应该能够得到服务,再次成功启动。

首先确认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

要closuresMongoDB,请进入Mongo CLI,访问pipe理员并发出关机命令:

$ ./mongo

>使用pipe理员

> db.shutdownServer()

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

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

没有为我工作,然后我发现这是/tmp目录上的权限问题:

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

上面的答案都没有为我工作。 我终于通过debugginginit脚本来了解它:

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

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

更新:我现在有一个很奇怪的问题,初始化脚本的工作,但只有当我运行“sudo bash -x /etc/init.d/mongodb start”而不是“sudo service mongodb start”。 同样的事情停止。

根据@nelsonic的build议检查数据,日志和日志文件夹中的所有权限后,我的问题是通过授予/ tmp文件夹中文件的权限

 sudo chown mongod:mongod mongodb-27017.sock 

我正在将其作为AWS Amazon Linux实例运行。 我想通过执行下面的mongod用户,然后研究错误代码。 这可能对其他疑难解答有用。

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

上述答案都没有为我工作,删除我的日志文件带来了Mongo的生活。

最近这个错误可能会发生,如果你已经更新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/

试试这个命令:

 sudo chown mongodb /tmp/mongodb-27017.sock