MongoDB 2.6在Ubuntu 15.04上无法启动。

我在全新安装的Ubuntu 15.04上安装了MongoDB 2.6
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update
sudo apt-get install -y mongodb-org

它顺利完成了。 然而,当我尝试启动它时,出现了以下错误:
$ sudo service mongod start
Failed to start mongod.service: Unit mongod.service failed to load: No such file or directory.

我该如何修复这个问题?

13个回答

我从debian wheeze repository安装了它,它运行得很好。
首先确保您删除了mongodb-org软件包及其所有依赖项:
sudo apt-get purge mongodb-org
sudo apt-get autoremove

删除您创建的旧mongodb.list文件:
sudo rm /etc/apt/sources.list.d/mongodb.list

使用Debian软件源代替:
echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list

更新并重新安装:
sudo apt-get update
sudo apt-get install -y mongodb-org

之后,您可以成功启动服务器:
sudo service mongod start

或者

systemctl start mongod

(在Ernie Hershey回复Roman Gaufman的评论中澄清,链接在此:https://jira.mongodb.org/browse/SERVER-17742

1我尝试了一下,但在启动mongod时出现了“服务未找到”的错误。 - Zippo
2你确定你自动删除了所有的依赖吗?我也遇到过这个问题,但后来我意识到我没有删除所有与mongodb相关的软件包。在删除了所有这些软件包并从wheezy仓库重新安装之后,它在systemd下正常工作了。 - Dielson Sales
1帮了我省去了很多麻烦 - Srivathsa Harish Venkataramana
1谢谢。清除后跟着自动删除(差点忘了)解决了问题。 - Nenad Vukicevic
在我的情况下,可能适用于14.04版,但也可能适用于15.04版,尾随/var/log/syslog,验证失败的尝试,然后编辑/etc/init/mongodb.conf也有帮助,如果您使用非标准的数据目录、日志目录或用户实例。 - Eat at Joes
我复制/粘贴了上面的内容,但由于purge提示需要回答,所以下一行粘贴的内容(autoremove)没有进入。 - Zlatko
有帮助,但没有回答楼主的问题,楼主的问题是关于Mongo 2.6而不是3.0;Debian Wheezy发行版是否也有一个2.6的软件仓库? - shashin
дҪ иғҪеҗҰи§ЈйҮҠдёҖдёӢеҰӮдҪ•иҮӘеҠЁеҢ–sudo service mongod startпјҢд»ҘдҫҝеңЁеҗҜеҠЁж—¶иҮӘеҠЁжү§иЎҢпјҹ - Hotbelgo
对我来说完美无缺!!另外,@shashin,如果你想要固定一个版本,你可以按照这里的说明进行操作:https://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/#install-the-mongodb-packages - Ajax

MongoDB团队表示他们不会支持Ubuntu 15.04,并计划支持16.04代替(参见https://jira.mongodb.org/browse/SERVER-17742)。
Ubuntu 15.04将默认的init系统从Upstart升级到systemd。 我尝试使用systemd启动MongoDB 3.0,但没有成功。
您可以通过安装upstart-sysv来切换回Upstart。
sudo apt-get install upstart-sysv

然后重新启动,MongoDB应该会启动起来。
我希望能找到一种简单的方法在Ubuntu 15.04上运行MongoDB,而不需要回退到过去的设置。

2这是目前解决这个问题的最佳方法。如果有人知道其他方法,请在这里分享。 - Fernando Kosh
在我的情况下,安装upstart-sysv并重新启动只会导致崩溃。 - Didac Montero
@DidacMontero 请查看https://wiki.ubuntu.com/SystemdForUpstartUsers获取其他选项。 - Zippo
在Ubuntu 15.04上对我有效,感谢你提供的解决方法! - Lil' Bits
这对我来说完美地起作用了。 - user459171
感谢修复非Mongo服务,如果问题能够更加通用化,比如Ubuntu >15上的init.d,那就更好了。由于谷歌的帮助,我最终在这里找到了解决方法,可以运行我的自己的服务(Spring Boot),与Mongo完全无关。 - Aubergine

你正在从mongodb.org直接发布的软件包进行安装。你应该从Ubuntu仓库提供的软件包进行安装。Debian/Ubuntu的软件包已经通过systemd服务单元进行了修补,以填补mongodb.org留下的漏洞。
(在互联网上有很多mongodb.service单元文件。编写一个也不难。我已经写好了。)
具体来说:你会在Ubuntu 15版本的mongodb-server 2.6软件包中找到这样的服务单元。所以只需安装那个软件包即可。
(请注意,Debian/Ubuntu提供的服务单元不适用于mongo推荐的systemd服务单元指令。)

进一步阅读


然而,这种方法并不能解决那些想要使用MongoDB >= 3.0的人的问题。 - Dielson Sales
是的,它确实有。你显然没有阅读第二段或进一步阅读的内容。 - JdeBP

我创建了一个Systemd脚本,似乎适用于Ubuntu 15.04+和Mongo 3.0+。
[Unit]
Description=High-performance, schema-free document-oriented database
Documentation=man:mongod(1)
After=network.target

[Service]
Type=forking
User=mongodb
Group=mongodb
RuntimeDirectory=mongod
PIDFile=/var/run/mongod/mongod.pid
ExecStart=/usr/bin/mongod -f /etc/mongod.conf --pidfilepath /var/run/mongod/mongod.pid --fork
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

https://gist.github.com/benileo/ada486d73f58dd93a0ee

确保你在/etc/mongod.conf中设置了你的数据目录。

1这是最好的解决方案。 - J. Bruni
链接已失效 - Hotbelgo
修复了链接。 - benileo
毫无疑问,这应该被标记为最佳解决方案。 - Wédney Yuri

这难道不是最好的答案吗? 来自一个重复的问题:https://askubuntu.com/a/694226/255468 由@sclausen回答
只是缺少一个systemd的服务文件而已。不需要像Kartik那样回到upstart,也不需要使用与https://docs.mongodb.org/manual/installation/中描述的不同的软件源。
创建一个名为/lib/systemd/system/mongodb.service的文件,并将以下内容复制进去:
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target

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

[Install]
WantedBy=multi-user.target

https://jira.mongodb.org/browse/SERVER-17742

似乎在Ubuntu 16.04之前,这个问题可能不会完全修复,除非有强烈的抗议声音。
所以对我来说,解决方案是执行以下命令:
sudo apt-get install --reinstall mongodb

使用"mongodb"代替"mongod"

i.e

sudo service mongodb start

sudo service mongodb stop

你在命令中打错了一个字。
试试用这个替代:sudo service mongodb start

在搜索了几个小时后,解决方案是使用以下命令将我的Ubuntu从15.04升级到16.04:
第一步
sudo do-release-upgrade -d 

这需要几分钟,请不要慌张,然后你必须删除MongoDB:

第2步

sudo apt-get purge mongodb-org 
sudo apt-get autoremove`  
rm /etc/apt/sources.list.d/mongodb-org-3.0.list`  

现在,安装MongoDB,但使用这个源:
echo 'deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.0 main' | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list

Step 3

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10  
echo ‘deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.0 main’ | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
sudo apt-get update
sudo apt-get install mongodb-org
sudo service mongod status

就是这样。

注意: 如果你遇到像“E: the type 'deb' in the first line . . . in the file mongodb-org-3.0.list”这样的错误

你只需要用gedit打开这个文件,删除句子开头和结尾的引号即可。


这部分“解决方案是将我的Ubuntu从15.04升级到16.04…”目前没有意义,因为16.04尚未发布。 - user37165
1@clearkimura 是的,没错。嗯,在alpha版中。不管怎样,我电脑上安装了Ubuntu 16.04的第二个每日构建版本,目前还没有遇到任何问题。 - Star OS

Ubuntu 15.04+ 使用 systemd 而不是 upstart。请参考 MongoDB 官方安装指南 进行安装。然后使用他们官方提供的 mongod.service
[Unit]
Description=High-performance, schema-free document-oriented database

[Service]
User=mongod
Group=mongod
Environment="OPTIONS=--quiet -f /etc/mongod.conf"
ExecStart=/usr/local/bin/mongod $OPTIONS run
PIDFile=/var/run/mongodb/mongod.pid

[Install]
WantedBy=multi-user.target

下载、打补丁、安装服务并设置目录和权限。
$ curl -OL https://raw.githubusercontent.com/mongodb/mongo/1663f45b4e33e058a0203a81f50574a870882c34/rpm/mongod.service
$ sed -i 's/\/usr\/local/\/usr/g' mongod.service
$ sed -i '/Desc/a After=network.target' mongod.service
$ sudo sed -i '0,/\/var\/lib\/mongodb/s//\/data\/db/' /etc/mongod.conf
$ sudo cp mongod.service /lib/systemd/system/mongo.service
$ sudo mkdir -p /data/db
$ sudo chown -R mongodb:mongodb /data
$ sudo systemctl daemon-reload
$ sudo systemctl enable mongod

开始服务

$ sudo systemctl start mongod

检查服务状态

$ sudo systemctl status mongod