对 /etc/init.d 与 /lib/systemd/system services 感到困惑

对 /etc/init.d 与 /lib/systemd/system services 感到困惑

我正在尝试在 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.

思考有一些冗余,我应该只选择两种方式之一。我想确定它是

  • 启动时调用
  • 可通过命令调用(如servicesystemctl)。

你能帮我理清思绪吗?

答案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。

相关内容