Я запускаю специальный сервис с классическим сценарием инициализации на 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.