Systemd active (exited) status of mrd6

systemd

I have installed mrd6 (Multicast routing daemon) which comes with an init script. I decided to create a systemd service unit in order to manage the relevant service. The unit file i created is the one described bellow:

[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

However, when i start the service using the systemd, i get status Active (exited) which means that systemd executed the commands specified in unit file but does not know if the process is indeed running. Checking running processes does not indicate that the service is started.

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 ....

How can i make systemd to properly handle this service and be able to recognize the the process is up and running?

Best Answer

You used the -D option to tell mrd6 to daemonize, i.e. fork and go into the background. But you selected the systemd Type=simple option. This option is meant for services which do not fork but run in the foreground. Instead, you should use Type=forking.

Remember to run systemctl daemon-reload after changing the unit file.