我在使用mongod作为服务时遇到问题:

Assertion: 28595:13: Permission denied src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267

我在ubuntu 16上运行mongodb

我严格按照mongodb文档中的说明安装了该版本,那么这是一个bug吗?如有任何关于如何解决此问题的建议,我们将不胜感激.

其他信息:

mongodb服务启动脚本看起来像这样,并以用户mongodb的身份运行,这可能与错误有关吗?

[Unit]
Description=MongoDB Database Service
Wants=network.target
After=network.target

[Service]
ExecStart=/usr/bin/mongod --config /etc/mongod.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
User=mongodb
Group=mongodb
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

推荐答案

我在将mongod作为一项服务进行发布时遇到了问题:当我使用sudo mongod-f/etc/mongod时,它如何工作.但是当使用sudo服务mongod start启动它时,我在日志(log)中得到了一个错误

sudo命令以root个权限(又名superuser access)启动mongod.如果将mongod作为服务运行,则用户和组将在服务定义中配置(在您的示例中,这两个都是mongodb).

不需要以root用户的身份运行mongod进程,根据Principle of least privilege的常见安全实践,强烈建议不要这样做.

如果要从命令行测试配置,可以使用sudo来与指定用户而不是默认(root)用户一起运行.

例如:

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

一般来说,最好使用服务配置,而不是手动运行mongod.对于手动调用,您还必须记住包括配置文件路径等参数(因为没有默认的配置路径).在没有配置文件的情况下,mongod还使用默认选项,例如/data/db中的dbPath.

断言:28595:13:权限被拒绝src/mongo/db/storage/wiredtiger/wiredtiger_kv_引擎.cpp 267

您权限错误的可能原因是以前以root用户的身份启动了mongod.一些目录和文件现在可能归root用户所有,因此mongodb用户无法访问这些目录和文件.您的具体错误与访问数据目录中的文件有关(即mongod.conf中配置的storage.dbPath).

假设您没有更改mongod.conf文件中的默认路径,您应该能够递归地调整权限,以符合mongod.service定义的预期.

首先,如果mongod实例当前正在运行,请确保已停止该实例.

然后,递归地调整预期用户和组的权限:

# storage.dbPath
sudo chown -R mongodb:mongodb /var/lib/mongodb

# systemLog.path
sudo chown -R mongodb:mongodb /var/log/mongodb

现在你应该可以开始mongod作为一项服务.如果服务无法启动,mongod日志(log)文件中应该有更多详细信息(假设mongodb服务用户可以写入日志(log)文件).

Mongodb相关问答推荐

MongoDB - 将属性添加到数组中的对象(如果不存在)

更新 Mongodb 中的多嵌套数组

NodeJS + MongoDB:使用 findOne () 从集合中获取数据

如何将查询结果(单个文档)存储到变量中?

如何使用 C# MongoDB 驱动程序检索字段子集?

如何在mongo中插入带有日期的文档?

从命令行创建 MongoDB 用户

mongoose递归填充

Mongo DB中的Upserting和Id问题

MongoDB - 投影一个并不总是存在的字段

MEAN 堆栈文件上传

在MongoDB中查询一个半​​径内的位置

MongoDB 范围查询中 $lt 和 $gt 的顺序

如何使用 MongoDB C# 驱动程序有条件地组合过滤器?

如何使用 Pymongo 在 MongoDB 中 Select 单个字段?

如何判断 MongoDB 中是否存在字段?

MongoDB备份计划

使用 $in 进行不区分大小写的搜索

无法从 mongodb 中删除集合

如何使用 Spring 的 MongoTemplate 和 Query 类检索字段子集?