通过 upstart 启动 mongod 时无法创建锁定文件

m90*_*m90 4 permissions services lock mongodb

我正在尝试将 mongodb upstart 脚本设置为仲裁器,但是在尝试在数据目录中创建锁定文件时遇到权限问题:

Tue Apr  1 17:11:01 [initandlisten] options: { config: "/etc/mongodb.conf", dbpath: "/tmp/arb", journal: "true", logappe
nd: "true", logpath: "/var/log/mongodb/mongodb-arbiter.log", port: 27017, replSet: "rs1" }
Tue Apr  1 17:11:01 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /tmp/arb/mongod.l
ock errno:13 Permission denied Is a mongod instance already running?, terminating
Run Code Online (Sandbox Code Playgroud)

肯定不存在锁定文件,并且肯定没有其他mongod进程正在运行(ps -A | grep mongod不会返回任何内容)。

此外,当我尝试启动该mongod过程时

mongod --fork --port 27017 --dbpath /data/arb --replSet rs1 --logpath /var/log/mongodb.log
Run Code Online (Sandbox Code Playgroud)

这在未sudo编辑时也会抛出相同的错误。

如何为 upstart 脚本设置正确的权限以写入数据/data/arb

Ada*_*m C 5

您需要拥有对该文件夹(及其下的所有内容)的权限,以便mongodb用户可以对其进行写入。它使用的原因sudo是因为root无论所有者/组如何,用户都具有这些权限。事实上,这可能是这里的根本原因 - 当您mongod使用 sudo运行该进程时,它将创建具有root:root普通 mongodb 用户无法访问的所有权的文件。

user:groupMongoDB的Ubuntu上通常mongodb:mongodb,因此只要做到以下几点:

cd /tmp/arb
sudo chown -R mongodb:mongodb .
Run Code Online (Sandbox Code Playgroud)

由于您在这里运行仲裁器,我还建议您在配置文件中使用以下选项(注意:不适用于常规数据承载节点 - 仅限仲裁器):

这些设置将最大限度地减少仲裁器在主机上的占用空间。