我在Ubuntu 10.04 LTS上关闭了MongoDB。现在当我以root身份登录并通过服务mongodb start运行Mongodb时,我得到以下错误 -
Mon Dec 12 13:53:15 [initandlisten] ERROR: listen(): bind() failed errno:13 Permission denied for socket: /tmp/mongodb-27017.sock
当我通过root手动运行MongoDB时,它运行正常。
我可以确认没有/tmp/mongodb-27017.sock文件
root@devbox:~# ll /tmp/
total 16
drwxr-xr-x 4 root root 4096 2011-12-12 13:53 ./
drwxr-xr-x 25 root root 4096 2011-12-11 13:06 ../
drwxrwxrwt 2 root root 4096 2011-12-12 13:01 .ICE-unix/
drwxrwxrwt 2 root root 4096 2011-12-12 13:01 .X11-unix/
我从哪里开始排除故障?
什么是/ tmp上的文件权限?他们有可能被改变了吗?
一个
# ls -ld /tmp
会告诉你的。
如果你不确定尝试:
# chown root:root /tmp
# chmod 1777 /tmp
这可能会解决它。
尝试更改这样的所有者,
sudo chown mongodb:mongodb /tmp/mongodb-27017.sock
确保Ubuntu mongo用户可以访问该文件。 Mongo Ubuntu服务使用Ubuntu Mongo用户。要找出mongo用户名,请转到/ var / lib / mongodb目录并显示权限:ls -l
我有同样的问题,因为我使用root运行mongodb,它将在CentOS 7.3上使用systemctl
启动失败。
请使用mongodb的正确权限。
$ sudo chown -R mongod:mongod \
/var/run/mongodb/mongod.pid \
/tmp/mongodb-27017.sock \
/var/lib/mongo/
如果我们有像Error reading file /path/file: Permission denied
这样的其他失败,也许我们可以通过SELinux修复它。
$ sudo chcon -v -t mongod_var_lib_t /path/file
顺便说一句,我不建议使用777许可,这是危险的。 :P
在3.0之前的版本中,默认情况下使用777权限创建套接字。对mongod socket设置权限最正确的方法是在mongodb.conf中设置值。例如:
sudo vim /usr/local/etc/mongodb.conf
并插入行:
filePermissions = 0777
它。
如果您尝试使用chown和chmod直接更改/tmp/mongodb-27017.sock的权限,您可以将其设置为临时。并在mongod服务重启或服务器重启后拥有旧权限。
我们使用mac并安装mongodb,通常不需要mongodb.conf,所以,试试这个:
sudo chown -R your-username /tmp/
ps:你的用户名是你在mac os中的用户名,而不是root.if你不知道你的用户名是什么,有一个命令:
whoami