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

时间:2012-09-01 23:11:11

标签: mongodb ubuntu service

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

11 个答案:

答案 0 :(得分:102)

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

接下来你按照这样运行:

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或类似的方式进行验证以确定。完成此操作后,您应该能够再次成功启动服务。

答案 1 :(得分:36)

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

     

>使用管理员

     

> db.shutdownServer()

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

答案 2 :(得分:9)

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

答案 3 :(得分:3)

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

sudo chown mongod:mongod mongodb-27017.sock  

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

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

上述答案都不适合我。我终于通过调试init脚本来解决它:

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”运行它。停止也是一样。

答案 6 :(得分:1)

试试这个命令:

sudo chown mongodb /tmp/mongodb-27017.sock

答案 7 :(得分:1)

我的mongodb是作为mongod用户从命令行启动的,而不是作为User = mongod的服务启动的。 一个小时后,检查权限,服务的定义,套接字……就是SElinux了!

在/ etc / selinux / config中,我从强制切换为宽松并重新启动。现在可以了。

答案 8 :(得分:0)

上述答案都没有对我有用,删除我的日志文件使Mongo恢复了生机。

答案 9 :(得分:0)

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

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

# engine: wiredTiger
engine: mmapv1

小心 - YAML是空白敏感的

journalctl / systemd不会看到这个问题。检查mongod登录/var/log/mongodb/mongod.log

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

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

答案 10 :(得分:0)

还要检查您的硬盘空间,因为如果/ var / log已满,则服务将无法追加日志。