我正在尝试使用不同的配置文件在同一台 centos 机器上运行多个 mongod 实例。
我在将实例作为服务运行时遇到以下错误:
sudo service mongod1 start
/var/lib/mongo1: boost::filesystem::status: Permission denied: "/var/lib/mongo1/mongod.lock"
我已经使用以下方法添加了 /var/lib/mongo1 的权限:
sudo chmod -R 600 /var/lib/mongo1
最后我也尝试过 700、755 和 777,但似乎没有效果。
mongod:mongod is the owner of the folder /var/lib/mongo1
如有任何帮助,我们将不胜感激。
我知道这真的很晚了,但我已经为此苦苦挣扎了好几天,现在才找到解决办法。话虽如此,对于未来遇到此问题的用户来说,如果您使用 SELinux,解决方案是根据您自己的路径检查默认 mongodb 路径的上下文,以确保它们通过执行
相同ls -dZ /var/lib/mongo/
输出应该看起来像这样
drwxr-xr-x. mongod mongod system_u:object_r:mongod_var_lib_t:s0 /var/lib/mongo/
如果不是,那么你可以通过以下方式复制它
chcon -R --reference=/var/lib/mongo /your/path
来源可以在这里找到
也许
lock
文件丢失了?这也许可以解释为什么 chmod
没有达到预期的效果......
尝试:
touch /var/mongo1/mongod.lock
chown mongod:mongod
chmod 600 /var/mongo1/mongod.lock
重要:
不要尝试使用 sudo 重新启动 mongo,因为它会尝试将用户更改为 root,其中 /var/lib/mongodb 所有者是 mongod:mongod
我无法评论,所以我在这里完成答案https://stackoverflow.com/a/60748820/8608006
对于我的自定义 mongo 文件夹,我将其放在 /data/mongo/ 中,我遵循了针对 selinux 的 mongo 建议
sudo semanage fcontext -a -t mongod_var_lib_t '/data/mongo.*'
sudo chcon -Rv -u system_u -t mongod_var_lib_t '/data/mongo'
sudo restorecon -R -v '/data/mongo'
但还是没成功。问题是我的 /data 文件夹是 unlabeled_t,我用这个命令修改了它
sudo restorecon -R -v /data
一切正常,我希望这对某人有帮助
请记住目录需要有执行权限,但目录内的文件不需要执行权限。
以下 2 个命令对我有用
$ sudo chmod -R 770 /var/lib/mongo1
$ sudo find /var/lib/mongo1 -type f -exec chmod 660 {} \;
这将首先赋予
/var/lib/mongo1
下的所有文件执行权限,然后将所有普通文件恢复为只能读取和写入,但不能执行。