我在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/
我从哪里开始排查?
答案 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