我正在尝试设置我的 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 .
由于您在此处运行仲裁器,因此我还建议您在配置文件中使用以下选项(注意:不能在常规数据承载节点上使用 - 仅适用于仲裁器):
这些设置将最大限度地减少仲裁器在主机上的占用空间。