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

Как убедиться, что systemd правильно отслеживает статус службы при сбое остановки службы?

Мне так нравится systemd, это невероятно! Я пытаюсь обойти это systemd проблема.

По сути, у меня запущен демон Java на переднем плане. Это приложение должно быть корректно завершено и может сделать это только тогда, когда оно простаивает, так как необходимо завершить длительные транзакции.

Наш оригинал sysvinit решение работало так хорошо в течение многих лет, мы не думали, что это использует уникальный шаблон ... сценарий выключения может действительно выйти из строя, а обычная парадигма - проверка кодов возврата, верно? поэтому, если предпринята попытка остановить службу, и эта попытка не удалась:

Теперь рассмотрим следующие dummy сервис, представляющий наш вариант использования:

[Unit]
Description=Dummy.

[Service]
User=user
Group=group
ExecStart=java -jar app.jar
ExecStop=gracefull_shutdown_script_that_could_timeout_or_fail_if_stopping_is_not_possible_at_the_moment.sh
KillMode=none # If Exec stop fail, keep running.

[Install]
WantedBy=multi-user.target

Что происходит, когда gracefull_shutdown_script_that_could_timeout_or_fail_if_stopping_is_not_possible_at_the_moment.sh терпит неудачу, когда systemctl stop dummy вызывается?

Тем не менее, этот сервис по-прежнему очень активен и вполне может обрабатывать больше запросов. Однако как только это состояние будет достигнуто, попытка systemctl stop dummy снова ничего не делает.

Как ни странно, systemctl start dummy, после этой второй попытки завершить обработку запроса остановки ...

Я думаю, что мне, возможно, потребуется сообщить об ошибке в SystemD, но я хотел бы услышать о любом обходном пути, который вы можете предложить.

Спасибо.