Мне так нравится 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, но я хотел бы услышать о любом обходном пути, который вы можете предложить.
Спасибо.