在Ubuntu 16.04 LTS上运行MongoDB

43

如何在Ubuntu 16.04 LTS上作为服务运行Mongodb? 几天前我将我的服务器升级到Ubuntu 16.04。我发现当我重新启动后,我的MongoDB服务没有启动。 尝试使用

sudo initctl start mongod

并不能解决问题。 有人有想法如何解决吗?

5个回答

86

任何升级或安装Ubuntu 16.04(也称为Ubuntu Xenial Xerus)的人都会注意到一些旧服务停止运行了。这个问题从版本15.04就已经存在,但我将重点关注上述版本。

我的情况与MongoDB类似。简而言之,Ubuntu从upstart转向systemd。对于这些问题的一个常见解决方案是切换回upstart。我不认为这是一个真正的解决方案,特别是从长远来看。

问题的一个真正解决方案(在我看来)是编写一个systemd脚本来启动MongodDB。不幸的是,MongoDB的开发者尚未提供这样的脚本。

因此,我不得不从头开始编写一个。按照以下步骤创建自己的脚本:

  1. 使用以下命令切换到root账户
    sudo su
    

或在以下所有步骤中使用sudo。

  1. 创建一个服务脚本(在本例中服务名称为Mongodb)

    nano /lib/systemd/system/mongodb.service
    
  2. 文件内容应为

    [Unit]
    Description=MongoDB Database Service
    Wants=network.target
    After=network.target
    [Service] ExecStart=/usr/bin/mongod --config /etc/mongod.conf ExecReload=/bin/kill -HUP $MAINPID Restart=always User=mongodb Group=mongodb StandardOutput=syslog StandardError=syslog
    [Install] WantedBy=multi-user.target

您还可以从此处下载该文件: mongodb.service
以下是各个字段的简要说明:
ExecStart - 要运行的命令。Mongo安装在/usr/bin下,配置文件写在/etc下
User - mongod进程的uid。
Group - mongod进程的gid。请注意,用户和组是由安装创建的。

现在启动mongodb:

sudo systemctl start mongodb

停止 MongoDB 服务请使用:

sudo systemctl stop mongodb

启动时启用mongodb

sudo systemctl enable mongodb.service

如果您需要刷新服务,请使用:

 sudo systemctl daemon-reload

2
我一直看到这个消息:Failed to start mongodb.service: Unit mongodb.service is masked. 这是什么意思? :/ - IIllIIll
13
更新:我执行了 sudo apt-get install --reinstall mongodb,现在一切正常。感谢这位网友:http://ubuntuforums.org/showthread.php?t=2275509&p=13273670#post13273670 - IIllIIll
1
你好。当你第一次尝试使用mongod运行mongodb时,所有新生成的文件都有root权限。这不好,因为mongodb使用自己的用户组运行。 - Sagi Forbes
我不得不修改它,以使用/etc/mongodb.conf而不是/etc/mongod.conf - 但除此之外,它工作得很好。谢谢。 - Razie

39

最新版本的MongoDB现在可以完成大部分工作,但目前还有一件事情无法实现。 在Ubuntu 16.04.x上安装MongoDB后,请按以下方式运行命令:

The latest version of MongoDB does most of things except one thing for now. After installing the MongoDB on Ubuntu 16.04.x , run the commands as follows:


$ sudo systemctl enable mongod.service
$ sudo systemctl daemon-reload

现在最有可能每次启动自动开始运行 mongod


这个解决方案同样适用于出现以下错误的情况:

Failed to start mongod.service: Unit mongod.service not found.

运行上述命令后,下面的命令开始工作:

$ sudo service mongod start
$ mongo

同样地,所有已安装的服务必须启用才能运行。 例如,在安装 Ops Manager(又称 MMS)之后,文档中建议运行以下命令。

$ sudo systemctl start mongodb-mms.service

很可能 Ubuntu 没有启动该服务。因为它尚未被启用。要启用它,只需运行以下命令:

$ sudo systemctl enable mongodb-mms.service
$ sudo systemctl daemon-reload

然后尝试启动该服务:

$ sudo systemctl enable mongodb-mms.service

就这些了...


2
谢谢你,兄弟。你救了我的一天。 - Jie Li
其他建议的解决方案在我的Ubuntu 16.04和MongoDB 3.4.1上都没有起作用,但这个解决方案有效。 - amberv
谢谢,我已经成功地在Ubuntu 16.04.3 LTS上安装了MongoDB版本3.4.10。 - ktsangop
在Ubuntu 18 LTS上,对我来说,sudo systemctl enable mongodb.service 运行良好。 - Nditah
2
这是对我来说最好的答案。 - Rahmat Siswanto

26

需要进行全新安装的用户

我为此苦苦挣扎了一个小时。后来我找到了这个页面,安装只需要执行以下步骤:

sudo apt-get update
sudo apt-get install mongodb

然后检查一下是否一切正常:

sudo service mongodb status

如果这个方法能够运作,请告诉我!


4
以下是“状态”命令的输出结果:“mongodb.service | Loaded: not-found (Reason: No such file or directory) | Active: inactive (dead)” 在Ubuntu 16.04系统上。 - naXa stands with Ukraine
1
是的,它在Ubuntu 16.04(Xenial)中运行良好。以下是终端输出:● mongodb.service - 面向对象/文档导向数据库 已加载:已加载 (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled) 活动状态:自从2016年12月02日星期五20:57:58 IST以来一直处于活动状态;14分钟前 文档:man:mongod(1) 主PID:9827 (mongod) CGroup:/system.slice/mongodb.service └─9827 /usr/bin/mongod --config /etc/mongodb.confDec 02 20:57:58 bhabani-X550CC systemd[1]: 已启动面向对象/文档导向数据库。 - WaterRocket8236
我也收到了不活动(死亡)的消息,但它仍在工作。 - chovy
1
它是 mongod 而不是 mongodb - chovy
这个命令总是安装版本3.6.3,但我想安装4.0.9或任何4.0.*的版本,但无法做到。 - Nitin
显示剩余2条评论

23

3.2+版本的软件包包含了upstart脚本。

首先按照官方安装说明进行安装:

# If you installed the ubuntu package, remove it, if not skip to key import
sudo apt-get remove mongodb
sudo apt-get autoremove
# import key
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
# add trusty repos
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
# update apt
sudo apt-get update
# install the package
sudo apt-get install -y mongodb-org

然后取消掩码mongodb.service工作(并启用和启动它)。我相信它被屏蔽是因为该软件包还包括upstart工作,因此您不希望两者同时启动。然而,在我们的情况下,这显然是我们想要的。

sudo systemctl unmask mongodb
sudo service mongod start

参考文献:

相关的 JIRA 问题

Ask Ubuntu 上的相关问题


我的问题涉及到MongoDb的旧版本(3.0.5)。但是感谢您的解释。 - Sagi Forbes
2
sudo systemctl unmask mongodb 是在 Ubuntu 16.04 上解决此问题的关键步骤。 - P1xt
5
在Ubuntu 16.04上,当我运行sudo service mongodb enable命令时,经常会出现“mongodb:unrecognized service”错误。但提供的指令很有帮助,点赞。 - naXa stands with Ukraine
你怎么让它在启动时自动运行呢?我正在使用这个版本,但是当我重新启动服务器时,mongod没有启动。 - chovy

0
sudo systemctl start mongod

这是在Ubuntu Linux 16.04上对我有效的方法


好了,他们修复问题的时候到了。在这篇文章发出时,他们正在处理仓库链接问题... - Sagi Forbes

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