MongoDB在Ubuntu上无法工作 -> mongod.service: 失败,结果为“退出代码”

23

我按照这个教程 这里 安装了mongodb,在安装过程中没有出现错误,但是当我尝试使用教程中提到的命令 sudo systemctl start mongodb 启动mongod服务器时,我使用这个命令 sudo systemctl status mongodb 检查是否正在运行时发生了错误。

 mongodb.service - High-performance, schema-free document-oriented 

database
   Loaded: loaded (/etc/systemd/system/mongodb.service; enabled; vendor preset: 
   Active: failed (Result: exit-code) since Rab 2016-06-01 18:04:20 MYT; 4s ago
  Process: 8241 ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf (cod
 Main PID: 8241 (code=exited, status=14)

Jun 01 18:04:20 yasinya systemd[1]: Started High-performance, schema-free docume
Jun 01 18:04:20 yasinya systemd[1]: mongodb.service: Main process exited, code=e
Jun 01 18:04:20 yasinya systemd[1]: mongodb.service: Unit entered failed state.
Jun 01 18:04:20 yasinya systemd[1]: mongodb.service: Failed with result 'exit-co
lines 1-10/10 (END)

有人可以告诉我出了什么问题,我该如何修复它吗?


请查看此处的答案(http://askubuntu.com/questions/767934/mongdb-installation-failed-on-ubuntu-16-04/767965#767965),或许可以帮助您。 - Shrabanee
好的,让我试一下,谢谢。 - Yya09
1
@titi23 我遇到了一个错误:无法启动mongod.service:找不到mongod.service单元 - Yya09
这个链接可能有解决方案。尝试使用你遇到的错误进行搜索,你会得到一些解决方案。 - Shrabanee
如果你正在运行mongodb服务器并更新了系统,很有可能会出现“旧”的锁定文件:你可以尝试删除它(在Ubuntu中:/var/lib/mongodb/mongod.lock),然后尝试 systemctl start mongodb.service - Pipetus
14个回答

51

最近我解决了同样的问题。我在谷歌上找不到解决方案,但是我有一些线索可以帮我解决它。在我这个案例中,这个问题与mongodb-27017.sock文件有关。

Failed to unlink socket file /tmp/mongodb-27017.sock errno:1 Operation not permitted

所以我已经将 /tmp/mongodb-27017.sock 文件的权限更改为默认的 mongodb 用户。

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

执行 sudo systemctl status mongodb 命令正常,mongodb 已启动。


非常感谢,这对我很有帮助! - ferran87
同样的情况也发生在 /var/lib/mongodb 和 /var/log/mongodb。 - Crisboot
1
应用您的解决方案后,我遇到了错误 - Failed to start mongod.service: Unit mongod.service not found. 有什么想法吗? - Kunal Pal
一个更短的一行命令可以达到相同的效果,即 sudo chown mongodb:mongodb /tmp/mongodb-27017.sock - DJCrashdummy

36

我也遇到了同样的问题,只需要重新启动电脑即可解决

sudo reboot

2
救了我的一天..! - Prasanth Jaya
1
哇,这真是相当有趣。 - Mohit Bhansali
1
这是一个持久性问题,解决方案有效,但在生产环境中我们不能一直重启... - DragonFire
做得好,那就是解决问题的方法。 - marcdahan
我的Manjaro也是通过重新启动解决的。 - undefined

32

此错误由遇到不可恢复的错误、未捕获异常或未捕获信号的 MongoDB 应用程序返回。系统在不执行干净关闭的情况下退出。

我通过命令解决了这个问题:

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

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

然后重新启动服务

sudo systemctl restart mongod

然后检查您的mongodb服务

sudo systemctl status mongod

1
已经为我解决了!谢谢 - Sergey Blohin
你是个传奇兄弟。感谢你救了我的一天。 - Akshay
谢谢。终于成功启动了数据库。 - Xonshiz
太好了。没有*.sock文件,但前4个命令解决了它! - Christopher Chalfant
这对我没有解决问题。 - Rylan Schaeffer
可能是因为你的磁盘空间已满,您可以通过运行 df -i 命令来检查它。无论如何,您可以检查 var/log/mongodb 下的 MongoDB 日志文件来澄清服务器问题。 - Dara Vichit

10

我有同样的用途,

只是得到了解决。

sudo reboot

2
这是主要原因,不要做任何事情,只需重新启动。 - Gaurav Gupta

6
首先,您应该检查mongo日志。它会告诉您出了什么问题。 $ tail -n 100 /var/log/mongodb/mongod.log 此命令将显示日志文件的最后100行,指向确切的问题。
例如,我的没有工作是因为我正在使用相同的端口27017运行一个mongo实例。当我运行另一个实例时,该实例无法加载。
日志:
2018-05-11T19:03:49.102-0400 I CONTROL  [initandlisten] MongoDB starting : pid=1247 port=27017 dbpath=/var/lib/mongodb 64-bit host=dev-hyuen
2018-05-11T19:03:49.103-0400 I CONTROL  [initandlisten] db version v3.2.20
2018-05-11T19:03:49.103-0400 I CONTROL  [initandlisten] git version: a7a144f40b70bfe290906eb33ff2714933544af8
2018-05-11T19:03:49.103-0400 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
2018-05-11T19:03:49.103-0400 I CONTROL  [initandlisten] allocator: tcmalloc
2018-05-11T19:03:49.103-0400 I CONTROL  [initandlisten] modules: none
2018-05-11T19:03:49.103-0400 I CONTROL  [initandlisten] build environment:
2018-05-11T19:03:49.103-0400 I CONTROL  [initandlisten]     distmod: ubuntu1604
2018-05-11T19:03:49.103-0400 I CONTROL  [initandlisten]     distarch: x86_64
2018-05-11T19:03:49.103-0400 I CONTROL  [initandlisten]     target_arch: x86_64
2018-05-11T19:03:49.103-0400 I CONTROL  [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1", port: 27017 }, storage: { dbPath: "/var/lib/mongodb", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log", quiet: true } }
2018-05-11T19:03:49.124-0400 E NETWORK  [initandlisten] listen(): bind() failed errno:98 Address already in use for socket: 127.0.0.1:27017
2018-05-11T19:03:49.124-0400 E NETWORK  [initandlisten]   addr already in use
2018-05-11T19:03:49.124-0400 E STORAGE  [initandlisten] Failed to set up sockets during startup.
2018-05-11T19:03:49.124-0400 I CONTROL  [initandlisten] dbexit:  rc: 48

1
这个答案涵盖了大多数情况,运行tail命令在mongo db日志文件上将准确地显示出问题所在,然后我们可以从那里进行调试。 - Rakibul Haq

6

步骤1:sudo systemctl stop mongodb

步骤2:sudo systemctl start mongod

步骤3:sudo systemctl status mongod

希望对您有所帮助。


3

我的情况:

  1. 我从 官方网站安装了MongoDB。
  2. 安装后,甚至可以使用命令行Robo3TCompass进行操作。
  3. 重启后出现了问题。

因此,我检查了状态。

sudo systemctl status mongod

并收到了以下结果:

● mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sat 2021-02-20 18:11:19 IST; 5s ago
       Docs: https://docs.mongodb.org/manual
    Process: 724411 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=1/FAILURE)
   Main PID: 724411 (code=exited, status=1/FAILURE)

Feb 20 18:11:18 bunty systemd[1]: Started MongoDB Database Server.
Feb 20 18:11:19 bunty mongod[724411]: {"t":{"$date":"2021-02-20T12:41:19.657Z"},"s":"F",  "c":"CONTROL",  "id":>
Feb 20 18:11:19 bunty systemd[1]: mongod.service: Main process exited, code=exited, status=1/FAILURE
Feb 20 18:11:19 bunty systemd[1]: mongod.service: Failed with result 'exit-code'.

如果您的情况类似...

我是如何解决的?

  1. 检查这两个目录是否存在:/var/lib/mongodb/var/log/mongodb

您可以使用以下命令:

test -d /var/lib/mongodb && echo "Directory Exists"
test -d /var/log/mongodb && echo "Directory Exists"
  1. 如果不存在,可以使用 mkdir 命令创建。
sudo mkdir /var/lib/mongodb # run only if it does not exist
sudo mkdir /var/log/mongodb # run only if it does not exist
  1. 将这些目录的所有者更改为 mongodb。对这两个目录都执行此操作。
sudo chown -R mongodb:mongodb /var/lib/mongodb 
sudo chown -R mongodb:mongodb /var/log/mongodb 
  1. 重新启动mongod服务器。
sudo systemctl restart mongod
  1. 让我们检查一下。
sudo systemctl status mongod

如果输出结果如下:
 mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-02-20 18:15:01 IST; 59min ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 734383 (mongod)
     Memory: 166.7M
     CGroup: /system.slice/mongod.service
             └─734383 /usr/bin/mongod --config /etc/mongod.conf

Feb 20 18:15:01 bunty systemd[1]: Started MongoDB Database Server.

你可以开始使用了。

对于Mongo shell:

mongo

每次 mongod 发生故障时,这个方法对我都有效,希望对你也有用。

南无。


1

我遇到了类似的错误,在我的情况下,Mongo无法使用27017端口。我需要停止占用27017端口的任何程序并重新启动Mongo。


1
由于权限设置。
chown -R mongodb:mongodb /var/lib/mongodb
chown mongodb:mongodb /tmp/mongodb-27017.sock

如果在重新安装 MongoDB 后,这对我有用。我已经手动创建了。

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

并更改了双方的所有者

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

0
在谷歌上搜索了一段时间后,我发现这是因为/var/lib/mongodb和/tmp/mongodb-27017.lock的权限设置不正确。您需要将所有者更改为monogdb用户。
chown -R mongodb:mongodb /var/lib/mongodb
chown mongodb:mongodb /tmp/mongodb-27017.sock

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