我在推出mongod作为服务时遇到了问题:当我执行sudo mongod -f /etc/mongod.conf但是当使用sudo service mongod start启动它时,它是如何工作的我在日志中得到一个错误
Assertion: 28595:13: Permission denied src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267
我在ubuntu 16上运行mongodb
我完全按照mongodb文档中的说明安装该版本,这是一个错误吗?任何建议如何解决这一点是值得赞赏的.
附加信息:
mongodb服务启动脚本看起来像这样,并以用户mongodb运行它,这可能连接到错误?LIB/systemd /系统/ mongodb.service:
[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
Run Code Online (Sandbox Code Playgroud)
Ste*_*nie 48
我在推出mongod作为服务时遇到了问题:当我执行sudo mongod -f /etc/mongod.conf但是当使用sudo service mongod start启动它时,它是如何工作的我在日志中得到一个错误
该sudo命令mongod以root权限(也称为超级用户访问)开头.如果mongod作为服务运行,则在服务定义中配置用户和组(mongodb对于您的示例中的两者).
不需要以用户身份运行该mongod过程root,并且根据最小特权原则的常见安全实践强烈建议不要这样做.
如果要从命令行测试配置,可以使用sudo指定用户而不是默认(root)用户运行.
例如:
sudo -u mongodb mongod -f /etc/mongod.conf
Run Code Online (Sandbox Code Playgroud)
通常,最好使用服务配置而不是mongod手动运行.通过手动调用,您还必须记住包含配置文件路径之类的参数(因为没有默认的配置路径).如果没有一个配置文件,mongod也使用默认选项,如dbPath的/data/db.
断言:28595:13:权限被拒绝src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267
您的权限错误的可能原因是之前已mongod作为root用户启动.某些目录和文件现在可能由root用户拥有,因此mongodb用户无法访问这些目录和文件 .您的具体错误与访问数据目录中的文件(即配置storage.dbPath的mongod.conf)有关.
假设您没有更改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
Run Code Online (Sandbox Code Playgroud)
现在你应该可以mongod作为服务开始了.如果服务无法启动,则mongod日志文件中应该有更详细的信息(假设日志文件可由mongodb服务用户写入).
有同样的问题.
/var/log/mongodb/mongod.log中的内容:
2017-05-13T13:46:41.152+0700 E STORAGE [initandlisten] WiredTiger error (13) [1494658001:152518][15821:0x7fb843803cc0], connection: /var/lib/mongodb/journal/WiredTigerPreplog.0000000002: file-remove: unlink: Permission denied
2017-05-13T13:46:41.159+0700 I - [initandlisten] Assertion: 28595:13: Permission denied src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267
Run Code Online (Sandbox Code Playgroud)
所以我们看到有些东西无法删除/ var/lib/mongodb/journal /中的文件"WiredTigerPreplog.0000000002"所以id只是给了权限,我只是这样做了:
sudo chmod 764 /var/lib/mongodb/journal/
Run Code Online (Sandbox Code Playgroud)
如果没有帮助,请尝试:
sudo chown -R mongodb:mongodb /var/lib/mongodb/ && sudo chmod 764 /var/lib/mongodb/journal/
Run Code Online (Sandbox Code Playgroud)
共有三种触发此类问题的设置:
对于您的情况,请检查是否/data/db存在。如果不是,或者为空,则mongod尝试使用错误的dbpath。您需要找到它,它通常位于下/var/lib/mongodb。
找到它后,您可以做两件事。首先,将所有文件从那里复制到/data/db。其次,在mongod.conf文件下更改dbpath,该文件位于(在linux中)位于/etc/mongod.conf。确保使用--config指定的配置文件启动mongod 。
chown mongodb:mongodb dbpath -R。
如果您确定dbpath是正确的,并且那里没有WiredTiger.wt的实例。您的数据库已损坏。如果丢失此文件,则无法确保完整性。通过以下方式重新安装mongodb:
sudo apt-get purge mongodb-org*
sudo rm -r dbpath
sudo apt-get install mongodb-org
编辑:或从您的副本之一复制dbpath。
| 归档时间: |
|
| 查看次数: |
17178 次 |
| 最近记录: |