启动mongod.service失败:找不到mongod.service单元。

123

我按照 MongoDB 安装 文档中针对 Ubuntu 16.04 的所有步骤进行了跟随。

步骤1:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5

步骤2:

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

步骤3:

sudo apt-get update

步骤4:

sudo apt-get install -y mongodb-org

第五步:

sudo service mongod start

当我开始使用MongoDB时出现了错误:

无法启动 mongod.service:找不到 mongod.service 单元。


2
我也遇到了同样的问题,以下的答案是我唯一能用的:https://askubuntu.com/a/842599 - Ali Mousavi
35个回答

135

很可能单元mongodb.service被屏蔽了。 使用以下命令来取消屏蔽它。

sudo systemctl unmask mongod

然后重新运行

sudo service mongod start


28
返回值:Unit mongodb.service不存在,但仍会继续进行。 - alper
8
有一个重要的打字错误导致这个答案无法工作。请进行更正。在Ubuntu中,正确的单元名称是 mongod 而不是 mongodb。因此,解除屏蔽它的正确命令是:sudo systemctl unmask mongod。感谢您的关注。 - mahyard
19
由于某种原因,在Ubuntu 19.10上,我必须使用mongodb而不是mongod - Daniel
4
在Ubuntu 18上,应该使用mongodb而不是mongod。 - Max
5
那很困惑。 - Kris
显示剩余4条评论

72

请按照以下步骤操作,应该能够解决问题。

1 - 将当前安装完全卸载

来源 - 官方说明文档

sudo service mongod stop

删除软件包

sudo apt-get purge mongodb-org*

删除这些文件夹

sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb

2 - 按照官方网站上的说明重新安装,我将只列出所有步骤。在此输入链接描述

导入公共密钥

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5

为Ubuntu 16.04创建一个列表文件

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

更新列表

sudo apt-get update

安装最新的软件包

sudo apt-get install -y mongodb-org

3-现在应该可以工作了,请尝试下面的命令

sudo service mongod start

并检查状态

mongo

应该出现Mongo shell


8
对于那些重新安装无效的未来读者,这个AskUbuntu答案是一个更好的解决方案。不清楚这个答案和原帖尝试的区别,因为两者都指向相同的指令链接。 - Parfait
它可以工作了,我认为问题在于我没有为正确的Ubuntu版本安装(使用lsb_release -a检查)。 - Albert James Teddy
2
2021年的解决方案!谢谢伙计。 - dylanh724
在我的情况下,我安装了错误的非官方软件包从Ubuntu (sudo apt install mongodb-server)。为了删除这些软件包,我必须稍微修改前两个步骤:sudo service mongodb stop 然后 sudo apt-get purge mongodb* - YakovL
1
2022年的解决方案 - dawid
显示剩余3条评论

50

我想你可能漏掉了一个'b'?

sudo service mongod start

应该是

sudo service mongodb start

我认为这是这样的情况吗?


9
运行命令 "sudo systemctl unmask mongodb" 后,它可以正常工作 :) - Rahul
4
在Ubuntu 18.04上,如果你是从系统仓库安装的话,那么使用的是mongodb而不是mongod - qed
...而且从Ubuntu系统仓库安装并不被Mongo官方文档推荐,现在已经相当过时了。 - YakovL
没有叫做 MongoDB 的东西 - 安装的是一个守护进程,它的名称是 mongod - Yanjan. Kaf.
啊哈,谢谢伙计! - undefined

42

无法启动mongod.service:找不到mongod.service单元

如果您按照官方文档操作,遇到上述错误,那么意味着 mongod.service 尚未在您的计算机上启用(我是指Ubuntu 16.04)。 您需要使用以下命令来执行此操作。

sudo systemctl enable mongod.service

现在,您可以使用以下命令开始mongodb

sudo service mongod start

5
执行操作失败:没有这个文件或目录 :( - Midhun G S
尽管 systemctl list-unit-files --type=service 显示 mongod 已启用,但这仍然有效。奇怪。 - Christiaan Maks
运行第一个命令后,我得到了“无法启用单元:Unit文件mongod.service不存在。”的错误提示。 - Santanu Biswas

14

[解决方案]

只需输入

sudo mongod

它会起作用。


3
如果出现“Failed to enable unit: Unit file mongod.service does not exist.”这样的错误,只是权限拒绝了mongo用户,那么进行上述修复是无法解决问题的。 - Vladimir Ch
1
@JobinMathew,18.4 LTS 上运行良好。 - Mohammad Heydari
1
适用于16.04。 - Midhun G S
适用于20.04。 - J.dev
是的,但这并不像守护进程一样运行它,对于服务器来说有点无用。 - Shardj

10

跟我一起来看看

安装后一切正常,但在重启后出现了此问题。

对我有用的解决方法是

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 

运行上述命令后,打开一个新的终端并运行:

sudo systemctl restart mongod

并运行mongo shell以进行检查:

mongo

注意

如果这个问题再次发生(就像我每次重启时一样),请制作一个脚本,在启动时运行。

永久解决方案(启动时运行的脚本)

步骤1:

/etc/init.d目录中创建一个文件。

sudo gedit /etc/init.d/custom-mongo-fix.sh

第二步:

将以下代码放入你在第一步中刚打开的文件中。

#!/bin/bash

# mongodb fix
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 

步骤 3:

在下一次启动后,您可以通过以下方式正常启动 mongod 服务器:

sudo systemctl start mongod
说明:mongodb需要以上两个文件夹,所有者mongodb。当我们关闭/重启时,其中一个或两个文件夹会被删除。因此,我们需要创建它们并更改其所有权。
编辑:我在每次关机前使用Stacer的清理工具。这也会删除日志文件和文件夹。因此,在每次启动时出现错误。现在,我取消选中mongodb选项,然后进行清理。
Namaste.

1
这是唯一有效的事情。谢谢,你拯救了这一天,真是个天才。 - Rakshitha Muranga Rodrigo

8
对于Ubuntu 16.04.5版本,我注意到在安装MongoDB后,mongod.service文件并没有自动启用,这在我的几台服务器上都出现了这个问题。因此,我们需要像下面这样手动启用它:

执行以下命令来检查mongod是否已启用

systemctl list-unit-files --type=service

如果显示为“禁用”,则需要启用它。
sudo systemctl enable mongod.service

如果我们想查看mongod.service文件是否存在,以防此文件丢失,请在以下位置检查:

ls /lib/systemd/system

您将会看到一个文件

/lib/systemd/system/mongod.service

如果它丢失了呢? - Shardj

8
$service mongodb start
$service mongodb status

使用以上命令开始时,状态为活动状态。


8

在管理数据库中添加用户时,我经历了这种情况。

sudo systemctl daemon-reload 

官方的mongo网站推荐这样做,但并没有起到帮助作用。

如果您得到了下面的错误信息:

Job for mongod.service failed because the control process exited with error code. See "systemctl status mongod.service" and "journalctl -xe" for details.

执行时出现此问题。

sudo systemctl start mongod

运行 journalctl -xe 命令,如果问题是:
Failed to start MongoDB Database Server.
-- Subject: Unit mongod.service has failed

运行sudo mongod-->mongo,这将解决问题。如果您想使用systemctl运行,则需要终止mongodmongo的窗口,然后再运行。

sudo systemctl start mongod 

然后mongo


运行了 journalctl -xe,你猜怎么着?问题是磁盘已满。 - Wiktor Stribiżew

6

由于我的服务文件实际上是缺失的,而不是被屏蔽或禁用,所以现有的30多个答案都没有帮助我。重新安装也因某种原因未能创建它。解决方案:

cd /lib/systemd/system
sudo touch mongodb.service
# Copy and paste text to go into service file from snippet below horizontal rule
sudo nano mongodb.service
sudo systemctl daemon-reload
sudo systemctl start mongodb
sudo systemctl status mongodb

[Unit]
Description=An object/document-oriented database
Documentation=man:mongod(1)
After=network.target

[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf

[Install]
WantedBy=multi-user.target

您应该检查/etc/mongod.conf是否确实是您的conf文件的位置,它可能是/etc/mongodb.conf。

至于为什么您的服务文件一开始可能会丢失。我曾经通过卸载3.0.15、尝试并失败地安装5.*,因为某些依赖项冲突而无法在Ubuntu 16上运行它,然后重新安装3.0.15来破坏它。


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