我已经安装了带有 init 脚本的 mrd6(多播路由守护进程)。我决定创建一个 systemd 服务单元来管理相关服务。我创建的单元文件如下所述:
[Unit]
Description=Multicast routing daemon
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/mrd6 -D
PIDFile=/run/mrd6.pid
Type=simple
Restart=always
User=root
但是,当我使用 systemd 启动服务时,我得到状态 Active (exited),这意味着 systemd 执行了单元文件中指定的命令,但不知道进程是否确实在运行。检查正在运行的进程并不表示服务已启动。
root@debsrv:/etc/systemd/system# systemctl status mrd6.service
● mrd6.service - Multicast routing daemon
Loaded: loaded (/etc/systemd/system/mrd6.service; static)
Active: active (exited) since ....
如何使 systemd 正确处理此服务并能够识别该进程已启动并正在运行?
您使用
-D
选项告诉 mrd6 进行守护进程,即分叉并进入后台。但是您选择了 systemdType=simple
选项。此选项适用于不分叉但在前台运行的服务。相反,您应该使用Type=forking
.记得
systemctl daemon-reload
在更改单元文件后运行。