Eu instalei o mrd6 (daemon de roteamento Multicast) que vem com um script de inicialização. Decidi criar uma unidade de serviço systemd para gerenciar o serviço relevante. O arquivo de unidade que criei é o descrito abaixo:
[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
No entanto, quando inicio o serviço usando o systemd, obtenho o status Active (exited), o que significa que o systemd executou os comandos especificados no arquivo de unidade, mas não sabe se o processo está realmente em execução. A verificação dos processos em execução não indica que o serviço foi iniciado.
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 ....
Como posso fazer o systemd lidar adequadamente com esse serviço e ser capaz de reconhecer que o processo está em execução?
Você usou a
-D
opção de dizer ao mrd6 para daemonizar, ou seja, bifurcar e ir para segundo plano. Mas você selecionou a opção systemdType=simple
. Esta opção destina-se a serviços que não bifurcam, mas são executados em primeiro plano. Em vez disso, você deve usarType=forking
.Lembre-se de executar
systemctl daemon-reload
após alterar o arquivo da unidade.