Я установил mrd6 (демон многоадресной маршрутизации), который поставляется со сценарием инициализации. Я решил создать сервисную единицу systemd, чтобы управлять соответствующей службой. Созданный мной юнит-файл описан ниже:
[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 демонтировать, то есть выполнить разветвление и перейти в фоновый режим. Но вы выбрали systemd Type=simple
вариант. Эта опция предназначена для сервисов, которые не вилка, но работает на переднем плане. Вместо этого вы должны использовать Type=forking
.
Не забудьте бежать systemctl daemon-reload
после изменения файла модуля.