giomanda asked:
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.
[email protected]:/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?
My 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.
View the full question and any other answers on Server Fault.
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.