我已经安装了mrd6(多播路由守护进程),它附带了一个init脚本。 我决定build立一个系统化的服务单位来pipe理相关的服务。 我创build的单元文件是下面描述的单元文件:
[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(退出),这意味着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守护进程,即fork并进入后台。 但是您select了systemd Type=simple选项。 此选项适用于不分支但在前台运行的服务。 相反,你应该使用Type=forking 。
请记住在更改单元文件后运行systemctl daemon-reload 。