MongoDB - socket的权限被拒绝:/tmp/mongodb-27017.sock

时间:2011-12-12 18:58:05

标签: sockets mongodb file-permissions upstart

我在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/

我从哪里开始排查?

6 个答案:

答案 0 :(得分:17)

/ tmp上的文件权限是什么?他们有可能被改变了吗?

A

# ls -ld /tmp

会告诉你。

如果您不确定,请尝试:

# chown root:root /tmp
# chmod 1777 /tmp

这可能会解决它。

答案 1 :(得分:17)

尝试更改此类所有者,

sudo chown mongodb:mongodb /tmp/mongodb-27017.sock

答案 2 :(得分:0)

确保Ubuntu mongo用户有权访问该文件。 Mongo Ubuntu服务使用Ubuntu Mongo用户。要查找mongo用户名,请转到/ var / lib / mongodb目录并显示权限:ls -l <​​/ p>

答案 3 :(得分:0)

我有同样的问题,因为我使用root运行mongodb,它将在CentOS 7.3上以BeginInvokeOnMainThread启动失败。

请使用mongodb的正确权限。 protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) { base.OnElementChanged(e); if (Control != null) { Control.FocusChange += (sender, eh) => { if (eh.HasFocus) { Device.BeginInvokeOnMainThread(() => { var imm = (InputMethodManager)Control.Context.GetSystemService(Context.InputMethodService); imm.HideSoftInputFromWindow(Control.WindowToken, HideSoftInputFlags.None); }); } }; } }

如果我们还有FocusChange之类的其他失败,也许我们可以通过 SELinux 来修复它。 systemctl

顺便说一下,我不建议使用777许可,这是危险的。 :P

答案 4 :(得分:0)

在3.0之前的版本中,默认情况下使用777权限创建套接字。 对mongod套接字设置权限的最正确方法是在 mongodb.conf 中设置值。例如:

sudo vim /usr/local/etc/mongodb.conf

并插入行:

filePermissions = 0777 

对此。

如果您尝试使用 chown chmod 直接将权限更改为 /tmp/mongodb-27017.sock 机会将其设置为临时。并且在mongod服务重启或服务器重启后拥有旧的权限。

答案 5 :(得分:0)

我们使用mac并安装mongodb, 通常不需要mongodb.conf, 所以,试试这个:

sudo chown -R your-username /tmp/

ps:您的用户名是您在mac os中的用户名,而不是root。如果您不知道用户名是什么,则有一个命令:

whoami