在Ubuntu 15.10上将MongoDB服务作为SystemD的守护程序运行


12

MongoDB仅支持Ubuntu长期支持(LTS)的版本。最后一个是Ubuntu 14.04 LTS,其初始化过程由Canonical的Upstart专有管理。但是,我在Linux标准SystemD初始化过程中使用Ubuntu 15.10。因此,我无法在启动时启动MongoDB服务。

当我阅读或尝试启动服务状态时,显示消息“无法加载”:

> systemctl status mongod
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
> sudo systemctl start mongod
Failed to start mongod.service: Unit mongod.service failed to load: No such file or directory.

我正在从https://docs.mongodb.org/master/tutorial/install-mongodb-on-ubuntu/运行官方的MongoDB 3.2社区版(mongodb-org),而不是来自Ubuntu的MongoDB 2.6元软件包(mongodb)资料库。

> sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
> 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
> sudo apt-get update
> sudo apt-get install -y mongodb-org

有人知道如何使用SystemD启动MongoDB吗?


1
我的问题是一个没有派生mongod的自定义配置文件,这是我所缺少的默认mongod conf的片段,processManagement:fork:true pidFilePath:/var/run/mongod.pid
Pykler

Answers:


25

我设法在启动时使用SystemD启动了MongoDB服务:

我卸载了官方元软件包(mongodb-org)v3.2,然后从Ubuntu存储库安装了元软件包(mongodb)v2.6:

> sudo apt-get remove mongodb-org
> sudo apt-get install mongodb

创建服务配置文件,如下所示:

> cd /lib/systemd/system
> sudo touch mongodb.service
> sudo nano mongodb.service
[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/mongodb.conf

[Install]
WantedBy=multi-user.target

使用以下命令在列表中验证是否启用或禁用了服务:

> systemctl list-unit-files --type=service
...
mongodb.service             disabled
...

如果已禁用或不在列表中,请启用它:

> sudo systemctl enable mongodb.service

再检查一遍:

> systemctl list-unit-files --type=service 
...
mongodb.service             enabled
...

现在,您可以在SystemD初始化过程中管理服务:

> systemctl status mongodb
> sudo systemctl stop mongodb
> sudo systemctl start mongodb
> sudo systemctl restart mongodb

请享用!


有关指向您错过的服务定义部分的指针,请参见askubuntu.com/a/617869/43344。另请注意,请勿进入由本地管理员提供和编写的服务单元/lib
JdeBP '16

1
该服务单元是由Canonical而非本地管理员编写的,因此它们必须位于/lib。服务定义的各个部分足以启动该服务,其他设置没有明显的作用,因此被认为是互补的。如果PIDFile=/var/run/mongodb/mongod.pidrun命令ExecStart=行上添加该行和指令,则会出现错误,因为我使用的是(mongodb)元软件包2.6,而不是(mongodb-org)元软件包3.2。
Fernando Santucci

1
为什么不赞成,我赞成。我也遇到了类似的问题,这个答案很有帮助,谢谢。

从Ubuntu 14升级到18,这非常有帮助,我唯一的补充是,chown在mongod通过systemctl启动之前,我必须重新创建数据和日志目录以及它们。安装文档不会告诉我任何东西,但万一有帮助的话!
汤姆·J·诺维尔

6

从MongoDB存储库进行默认安装时,为了自动启动mongod服务,您需要做的就是启用system.d服务:

systemctl enable mongod.service(注意mongo d服务名称,而不是mongodb

注意:这已在带有systemd的Debian / GNU Jessie 8.x和Ubuntu Xerus 16.04 LTS上进行了测试。


Ubuntu Xerus 16.04 LTS也是如此。从官方仓库安装后,您需要启用systemd服务单元!我刚刚通过另一个实例安装确认了它……:)
stamster

1
该文件存在于/lib/systemd/system/mongod.service我的Ubuntu 16.04中
Jyotman Singh 17-4-12

是的,有systemd单元定义,但是已禁用,因此您需要启用它才能在每次重新启动实例时自动启动它。
stamster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.