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

Bis*_*opZ 53 ubuntu service mongodb

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

sudo mongod
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,它无法找到/ data/db,这不是数据库所在的位置.在mongod.conf中,数据库路径被指定为Ubuntu 10gen缺省值/var/lib/mongodb,这是db所在的位置.好像mongod没有找到conf文件.所以当我跑:

sudo mongod -f /etc/mongodb.conf
Run Code Online (Sandbox Code Playgroud)

服务器启动正常,输出记录到日志文件中:/var/log/mongodb/mongodb.log.一切都很开心.我可以切换到另一个shell,登录mongo shell,查看数据库并运行查询.

所以,我取消了,并尝试作为服务运行:

> sudo status mongodb
mongodb stop/waiting
> sudo start mongodb
mongodb start/running, process 10468
Run Code Online (Sandbox Code Playgroud)

到目前为止看起来不错,但是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
Run Code Online (Sandbox Code Playgroud)

"test"不是正确的数据库,日志文件中没有任何内容.

我不知道可能出现什么问题.我检查了新贵脚本,看起来很好./etc/init/mongodb.conf运行:

mongodb --exec  /usr/bin/mongod -- --config /etc/mongodb.conf
Run Code Online (Sandbox Code Playgroud)

Ada*_*ord 105

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

接下来你像这样运行它:

sudo mongod -f /etc/mongodb.conf
Run Code Online (Sandbox Code Playgroud)

如果以前没有问题,那么现在就会出现 - 您已经使用普通配置(指向通常的dbpath和日志)作为root用户运行该过程.这意味着现在将在用户正常的MongoDB文件夹中存在许多文件:group of 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 .
Run Code Online (Sandbox Code Playgroud)

这应该解决它(假设用户:组是mongodb:mongodb),虽然它可能最好用一个ls -al或类似的验证来确认.完成此操作后,您应该能够再次成功启动服务.

  • 任何好的答案都是如此,只要你说出来,整个事情就变得显而易见了.谢谢! (3认同)
  • 谢谢你的回答,我遇到了完全相同的问题. (3认同)

nel*_*nic 38

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

关闭MongoDB,请进入Mongo CLI,访问admin并发出shutdown命令:

$ ./mongo

>使用管理员

> db.shutdownServer()

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


Dam*_*ran 9

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