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

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

我正在尝试设置我的 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

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

当我尝试启动该mongod过程时

mongod --fork --port 27017 --dbpath /data/arb --replSet rs1 --logpath /var/log/mongodb.log

当不编辑时,这也会引发相同的错误sudo

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

答案1

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

Ubuntu 上的MongoDBuser:group通常是mongodb:mongodb,因此只需执行以下操作:

cd /tmp/arb
sudo chown -R mongodb:mongodb .

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

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

相关内容