MongoDB 3.0中的“无法取消链接套接字文件”错误

我是MongoDB的新手。 我正在尝试在Ubuntu 13.0 LTS上安装MongoDb 3.0,这是Windows 7主机上的虚拟机。 我已经成功地安装了MongoDB(包等),但是当我执行命令sudo service mongod start ,在“/var/log/mongodb/mongod.log”日志文件中出现以下错误。 任何人都可以帮我理解这个错误。 互联网上没有任何与此有关的东西。

2015-04-23T00:12:00.876-0400 I CONTROL ***** SERVER RESTARTED ***** 2015-04-23T00:12:00.931-0400 E NETWORK [initandlisten]无法取消套接字文件/ tmp / mongodb -27017.soc k errno:1操作不允许2015-04-23T00:12:00.931-0400 I – [initandlisten]致命断言28578 2015-04-23T00:12:00.931-0400 I – [initandlisten]

我自己解决了这个问题,删除了mongodb-27017.sock文件。 删除这个文件后,我运行该服务,这工作正常。 但是,我仍然不确定问题的根源。 现在命令ls - lat /tmp/mongodb-27017.sock的输出

 srwx------ 1 mongodb nogroup 0 Apr 23 06:24 /tmp/mongodb-27017.sock 

替代KurioZ7提供的答案,您可以简单地将.sock文件的权限设置为当前用户:

 sudo chown `whoami` /tmp/mongodb-27017.sock 

如果我想运行没有sudo的mongod,这对我来说是个诀窍。 如果我像KurioZ7s答案那样删除文件,下次重新启动我的机器时,我只会得到相同的错误。

最可能的原因是mongod进程在某个时候是由root用户启动的。 套接字文件(/tmp/mongodb-27017.sock)因此由root用户拥有。 mongod进程通常在自己的专用用户下运行,并且该用户没有权限删除该文件。

正如您已经发现的那样,解决scheme是删除它。 然后mongodb能够用正确的权限重新创build它。 只要mongodb使用init脚本启动,或在正确的用户帐户下,这应该在重新启动后保留。

对于基于UNIX的操作系统,作为Bastronaut提供的答案的替代scheme,您还可以指定.sock文件保存到mongod具有完整用户权限的文件夹(对应于您运行mongod的方式),方式mongod也将能够在关机时删除.sock文件。 .sock文件保存的默认文件夹是'/ tmp'。 要指定另一个文件夹,请使用自定义的mongodbconfiguration文件,例如“mongodb.conf”,并添加以下内容:

 net: unixDomainSocket: pathPrefix: "anotherFolder" 

之后,您可以使用以下命令运行mongod:

 $ mongod --config /path/to/mongodb.conf 

您可以阅读以下文档: https : //docs.mongodb.org/manual/reference/configuration-options/#net.unixDomainSocket.pathPrefix

 $ sudo mongod 

它为我解决问题