我正在尝试在 Debian 8.5 机器上运行 MongoDB。当我安装该软件包(从 percona.com 预先构建)时,我注意到以下文件:
/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)
我知道它/etc/init.d/mongod
会在启动时或在其他特定系统状态下调用,只要它是通过update-rc.d
.这对我来说非常好。该脚本初始化并启动 mongo 守护进程。它似乎有启动、停止、重新启动等“触发器”,据我所知,我可以用sudo service mongod <action>
.
/lib/systemd/system/mongod.service
似乎做了同样的事情(即运行 mongo),但配置较少 - ExecStart 参数中只有一行:
[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target
据我了解,这可以通过 触发sudo systemctl start mongod
。
我不明白是否在启动时调用。
我不明白为什么需要两个“服务”文件,以及如何删除其中一个(可能是 /lib/systemd 中的文件,因为它要简单得多)。
我不明白这两者之间是否有任何关系。
我读过它也
systemctl
适用于init.d
脚本,在这种情况下,我不明白这两个文件中的哪一个将由systemctl mongod start
.
我思考有一些冗余,我应该只选择两种方式之一。我想确定它是
- 启动时调用
- 可通过命令调用(如
service
或systemctl
)。
你能帮我理清思绪吗?
答案1
当您同时拥有同名的init.d
脚本和 systemd文件时,systemd 将使用服务文件进行所有操作。.service
我相信该service
命令只会重定向到 systemd。 init.d 脚本将被忽略。
使用systemd
。它是 Debian 8 中的新增功能,但它是默认设置。 Systemd 服务文件是应该看起来比 init.d 脚本更简单。您没有提到 systemd 服务不支持您需要的任何特定功能。
如果未包含服务文件,systemd
则很乐意使用 init.d 脚本。所以 mongod 包开发人员告诉您他们认为这个 systemd 定义更好:)。
看看 的输出systemctl status mongod
。如果该服务已启用在启动时启动,则该Loaded:
行将显示“已启用”。否则你可以使用systemctl enable mongod
.你还可以包含该选项--now
,它会同时启动 mongod。