Сервер Minecraft не останавливает JVM при сбое или остановке

На вашем сервере cPanel установлено eximтаким образом, что вы не можете установить postfix.

Судя по тому, что я только что нашел при поиске, cPanel не поддерживает postfix. Вам нужно будет настроить свой экземпляр gitlabдля использования SMTP-сервера, работающего на локальном хосте , поскольку кажется, что gitlabнесовместим с sendmail, который предоставляет exim.

1
13.04.2021, 22:06
1 ответ

Обычно перезапуск выполняется на основе кода выхода. Но если приложение зависает, то вам нужно предпринять более кардинальные действия.

По идее, ваш скрипт должен понимать, что вы собираетесь остановить сервер. Это может включать синтаксический анализ stdout для команды /stopили, проще говоря, systemctl stop minecraft.

Когда ваш сценарий понимает, что вы намерены остановиться, он должен подождать разумное количество времени, пока приложение корректно завершит работу. Когда это время истекает, это означает, что приложение зависло,поэтому вам нужно отправить более агрессивный сигнал , такой как SIGKILL, чтобы заставить приложение остановиться.

На практике это может быть немного сложно с реализацией screen. Но это легко, если вы используете systemdдля управления своим сервером Minecraft.

См. этот ответ для реализации управления сервером Minecraft с помощью systemd. Особо отметимRestart=:

[System]
Restart=on-failure

Это означает, что в случае сбоя службы она автоматически перезапустится. Вы также можете попробовать Restart=always, что заставит его запуститься, даже если он остановится с чистым кодом выхода.

Кроме того, systemd предоставляет эти значения по умолчанию, которые вы можете настроить, добавив их в свой сервис и изменив по своему усмотрению:

[Service]
TimeoutStopSec=90s
KillSignal=SIGTERM
FinalKillSignal=SIGKILL

Если вы попытаетесь systemctl stopили systemctl restartи ничего не произойдет, systemd будет ждать 90 секунд для корректного выхода, прежде чем уничтожить процесс. Время и сигналы можно изменить по умолчанию, изменив числа выше.

Конечно, все это предполагает, что вы отправляете (или написанный вами сценарий отправляет )systemctl restart minecraft, когда вы хотите перезапустить сервер. Он не определяет, зависает ли сервер во время игры.

0
28.04.2021, 22:52

Теги

Похожие вопросы