Установите RemainAfterExit=no для классического сценария инициализации в systemd

Установите RemainAfterExit=no для классического сценария инициализации в systemd

Я запускаю пользовательский сервис с классическим скриптом инициализации на Debian Jessie. Debian Jessie использует systemd. Причина, по которой я использую скрипт инициализации, заключается в том, что я также использую тот же сервис на Debian Wheezy, в котором нет systemd.

Поскольку служба может время от времени падать, я хочу, чтобы она перезапускалась после остановки. Насколько я понимаю, systemd позаботится об этом. Однако, когда я вручную завершаю службу (без systemctl stop service), systemctl statusбудет сообщать о службе как active (exited).

Насколько я понимаю, это означает, что systemd просто считает службу «работающей» без наличия процесса.В документации упоминается RemainAfterExitспособ настройки этого поведения, но это флаг для использования в unit-файле, у меня есть только скрипт инициализации.

Есть ли способ сообщить systemd, что службе init нужен процесс, чтобы считаться активной? Другими словами, дать ей знать, что active (exited)это нежелательное состояние?

решение1

Я решил проблему, написав шаблонный файл systemd unit. Сохраните файл в /etc/systemd/system/$SERVICE.service.

Замените $SERVICEна название службы.

[Unit]
Description=$SERVICE init script wrapper
After=network.target

[Service]
ExecStart=/etc/init.d/$SERVICE start
ExecStop=/etc/init.d/$SERVICE stop
ExecReload=/etc/init.d/$SERVICE reload
PIDFile=/var/run/$SERVICE.pid
RemainAfterExit=no
Restart=always
Type=forking

[Install]
WantedBy=multiuser.target

Запустите systemctl daemon-reload, чтобы обновить внутренние данные systemd.

Связанный контент