我已经安装了 mrd6(多播路由守护程序),它带有一个 init 脚本。我决定创建一个 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 正确处理该服务并能够识别该进程是否已启动并正在运行?
答案1
您使用了-D
告诉 mrd6 守护进程的选项,即 fork 并进入后台。但您选择了 systemdType=simple
选项。此选项适用于不要fork 但在前台运行。相反,您应该使用Type=forking
。
systemctl daemon-reload
请记住在更改单元文件后运行。