MongoDB服务退出代码为失败。

75
我无法使用命令“sudo systemctl start mongod”启动mongoDB。
我收到以下信息:
● mongod.service - MongoDB Database Server
   Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2020-02-19 22:39:00 CET; 2s ago
     Docs: https://docs.mongodb.org/manual
  Process: 29368 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=14)
 Main PID: 29368 (code=exited, status=14)

Feb 19 22:39:00 pop-os systemd[1]: Started MongoDB Database Server.
Feb 19 22:39:00 pop-os systemd[1]: mongod.service: Main process exited, code=exited, status=14/n/a
Feb 19 22:39:00 pop-os systemd[1]: mongod.service: Failed with result 'exit-code'.

我已经重新安装了mongodb,但问题仍然存在。 如果您能帮助我,我不知道错误出在哪里。 谢谢。

检查日志并找出实际原因始终是一个好的实践。这里是日志位置/var/log/mongodb/ - Muhammad Tariq
16个回答

209

暂时解决方案就是执行这两个命令:

sudo rm -rf /tmp/mongodb-27017.sock
sudo service mongod start

详细信息:

这可能是由于用户权限在 .sock 文件中引起的故障,您可能需要将所有者更改为 mongodb 用户。

sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chown mongodb:mongodb /tmp/mongodb-27017.sock

了解更多信息,请访问安装文档


1
如果在运行chown命令后出现权限错误,那么在每个命令后运行"sudo !!"。 - Muhammad Bilal
最佳解决方案,适用于Ubuntu 19.04。 - Willy satrio nugroho
它在我的Ubuntu 22.04上很好用。非常感谢。 - Pereira
在Ubuntu 20.04.6 LTS上,它对我非常有效。 - George Imerlishvili

36

我在Manjaro中遇到了同样的问题,这些命令解决了它:

chown -R mongodb:mongodb /var/lib/mongodb
chown mongodb:mongodb /tmp/mongodb-27017.sock

30

这对我很有用,而且我不需要重新安装MongoDB。我已经手动创建了。

sudo mkdir /var/lib/mongodb
sudo mkdir /var/log/mongodb

并且更改了两者的所有者

sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chown -R mongodb:mongodb /var/log/mongodb

除了这个,其他的解决方案都没有起作用。我正在运行 Elementary OS。 - paulobunga
这项工作,谢谢! - Wing Shum
谢谢,它起作用了。我尝试了所有的方法,更改权限,重新安装,创建和更改/data/db权限以及许多其他方法,都没有奏效,除了这个。 - heethjain21
1
出于好奇,这个解决方案修复了哪个 bug?似乎这不应该是必要的,但它对我起作用了。 - Matthew Lin

29
我曾经遇到相同的问题,所以我尝试更改权限和一些其他命令,这些命令是我在网上找到的,结果搞砸了我的MongoDB安装。以下是我尝试过的来自网络的命令,它们破坏了我的安装:
``` $ sudo chown mongodb:mongodb /tmp/mongodb-27017.sock $ sudo systemctl status mongod $ sudo systemctl start mongodb $ sudo systemctl unmask mongodb ```
之后,我通过使用以下命令重新安装mongodb解决了这个问题:
``` $ sudo service mongod stop $ sudo apt-get purge mongodb-org* $ sudo rm -r /var/log/mongodb $ sudo rm -r /var/lib/mongodb $ sudo apt-get install -y mongodb-org ```
现在启动mongodb并使用以下命令检查状态:
``` $ sudo systemctl start mongod $ sudo systemctl status mongod ```

1
太好了!这解决了问题,但它也删除了旧的数据库,而且每次如果我们遇到退出代码的问题,这可能不起作用。但这次它起作用了。 - James
不要忘记在 sudo apt-get purge 'mongodb-org*' 命令中的引号。 - Anne van Rossum
1
这对我有用,我还必须删除一些残留物:sudo rm /usr/bin/mongo*,这些残留物来自早期的安装并产生了冲突。 - Dave
太棒了!对我来说很有效。 - undefined

13

这两个命令对我解决了问题(Linux Mint 20.2)。

sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chown mongodb:mongodb /tmp/mongodb-27017.sock

2
这适用于Ubuntu 20.04。 - Viraj
这对我在Ubuntu 20.04上也起作用了...但是为什么这个能行呢,@Mr.Kabir? - CodeConnoisseur
我可以确认在Ubuntu 20.04中可以工作。 - Cipto HD
同样在我的Ubuntu 20.04上也有效。谢谢! - don_jon

7

我遇到这个错误是因为.sock文件的所有权问题, 只需尝试这两个命令即可:

chown -R mongodb:mongodb /var/lib/mongodb
chown mongodb:mongodb /tmp/mongodb-27017.sock

现在重新启动Mongo服务器 -

sudo systemctl start mongod

现在,您可以使用以下命令检查Mongo服务器的状态 -
sudo systemctl status mongod

7
这将对您有帮助,无需重新安装MongoDB。
sudo mkdir /var/lib/mongodb
sudo mkdir /var/log/mongodb

然后运行以下命令

sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chown -R mongodb:mongodb /var/log/mongodb

开始mongod服务

sudo service mongod start 

mongod.service将会处于活动状态

sudo service mongod status

6

对我来说,这很有效

sudo systemctl stop mongod
sudo mongod --repair --dbpath /var/lib/mongodb
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chown mongodb:mongodb /tmp/mongodb-27017.sock
sudo systemctl start mongod

多亏了 @https://stackoverflow.com/users/811240/mike 的提醒,我想起来要读取日志了。对于这个答案,情况是:Failed to unlink socket file,"Operation not permitted"。 - Ryuujo
感谢@https://stackoverflow.com/users/811240/mike的提醒,我想起了阅读日志。对于这个答案,情况是:Failed to unlink socket file, "Operation not permitted"。 - undefined

2

奇怪的是,其他回答中都没有提到查看日志文件。这应该是你首先要做的事情。在Ubuntu上,它位于/var/log/mongodb/mongod.log

在我的情况下,我收到了以下类似的消息:

{
   "t":{
      "$date":"2022-12-03T17:19:25.117+00:00"
   },
   "s":"F",
   "c":"CONTROL",
   "id":20574,
   "ctx":"main",
   "msg":"Error during global initialization",
   "attr":{
      "error":{
         "code":140,
         "codeName":"InvalidSSLConfiguration",
         "errmsg":"ssl client initialization problem for certificate: /etc/ssl/mongodb.pem :: caused by :: The provided SSL certificate is expired or not yet valid. notBefore 2022-08-22T21:15:57.000+00:00, notAfter 2022-11-20T21:15:56.000+00:00"
      }
   }
}

因此,解决方案是更新已过期的SSL证书。

如果您正在使用Let's Encrypt,这里有一个--post-hook脚本可以自动执行此操作(将example.com更改为您的域名):

#!/bin/bash
cat /etc/letsencrypt/live/example.com/{fullchain.pem,privkey.pem} | tee /etc/ssl/mongodb.pem 
chown mongodb:mongodb /etc/ssl/mongodb.pem
chmod 600 /etc/ssl/mongodb.pem

如果证书已存在,您也可以将其添加到/etc/letsencrypt/renewal/example.com.conf[renewalparams]下。
post_hook = /root/path/to/script.sh

或者您可以使用一行代码而不是链接到外部脚本:

post_hook = cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem | sudo tee /etc/ssl/mongodb.pem && chown mongodb:mongodb /etc/ssl/mongodb.pem && chmod 600 /etc/ssl/mongodb.pem

这个答案应该被提升。在我的情况下,查看日志后,我发现错误是TCP端口被其他进程占用了。然后我运行了“sudo lsof -i -P -n | grep LISTEN”来找出罪魁祸首(对我来说是在Docker容器中运行的Mongo)。 - Cosmo

1
使用这个命令:
sudo chown -R mongodb:mongodb /var/lib//mongodb

然后这个命令:
sudo chown mongodb:mongodb /tmp/mongodb-27017.sock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接