Назад | Перейти на главную страницу

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

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

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

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

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

Я решил проблему, написав общий шаблонный файл модуля systemd. Сохраните файл в /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.