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?
You used the
-D
option to tell mrd6 to daemonize, i.e. fork and go into the background. But you selected the systemdType=simple
option. This option is meant for services which do not fork but run in the foreground. Instead, you should useType=forking
.Remember to run
systemctl daemon-reload
after changing the unit file.