На вашем сервере cPanel установлено exim
таким образом, что вы не можете установить postfix
.
Судя по тому, что я только что нашел при поиске, cPanel не поддерживает postfix
. Вам нужно будет настроить свой экземпляр gitlab
для использования SMTP-сервера, работающего на локальном хосте , поскольку кажется, что gitlab
несовместим с sendmail
, который предоставляет exim
.
Обычно перезапуск выполняется на основе кода выхода. Но если приложение зависает, то вам нужно предпринять более кардинальные действия.
По идее, ваш скрипт должен понимать, что вы собираетесь остановить сервер. Это может включать синтаксический анализ 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
, когда вы хотите перезапустить сервер. Он не определяет, зависает ли сервер во время игры.