Зачем нужен автоматический перезапуск сервера Minecraft на Linux
Каждый администратор игрового мира рано или поздно сталкивается с внезапными падениями сервера. Причины могут быть разными: нехватка оперативной памяти, конфликт плагинов, ошибка в сборке или даже внезапное отключение электричества. В такие моменты игроки теряют прогресс, а владелец — нервы. Ручной перезапуск отнимает время, особенно если вы не сидите круглосуточно у консоли. Решение — настроить автоматический мониторинг и перезапуск с помощью простых bash-скриптов и стандартного планировщика cron. Этот подход работает на любом дистрибутиве Linux и не требует специальных знаний программирования.
Представленная ниже инструкция проверена на Ubuntu, CentOS и RHEL, но подойдёт и для других систем. В качестве примера используется сервер Spigot, однако методика универсальна: Vanilla, Bukkit, Paper или даже модифицированные сборки вроде Tekkit запускаются по тому же принципу. Единственное условие — наличие терминала и прав суперпользователя.
Подготовка окружения: установка Screen
Когда вы запускаете Minecraft-сервер в обычной сессии терминала, процесс останавливается сразу после закрытия окна или разрыва SSH-соединения. Чтобы сервер работал в фоновом режиме, мы будем использовать утилиту Screen. Она создаёт виртуальные консоли, которые продолжают жить даже после выхода из системы.
Проверьте, установлен ли Screen:
which screen
Если команда вернула путь (например, /usr/bin/screen), можно переходить к следующему шагу. В противном случае выполните установку:
- Ubuntu / Debian:
sudo apt-get update && sudo apt-get install screen - CentOS / RHEL:
yum install screen
Теперь утилита готова к работе, и мы можем переходить к созданию скриптов.
Скрипты для автоматического перезапуска
Основная идея — два небольших файла, которые проверяют, жив ли процесс сервера, и при необходимости запускают его заново. Первый скрипт MCServerResetCheck.sh анализирует наличие Java-процесса с нужным именем jar-файла. Если процесс не обнаружен, вызывается второй скрипт start.sh, который стартует сервер внутри сессии Screen.
Скачайте оба файла и поместите их в рабочую директорию сервера — туда же, где лежит ваш spigot-1.11.2.jar (или аналогичный исполняемый файл). В нашем примере это /root/minecraft/. Если вы предпочитаете создавать скрипты вручную, просто скопируйте приведённый ниже код в текстовые файлы с соответствующими именами.
Содержимое MCServerResetCheck.sh
#!/bin/bash
ps aux | grep -v grep | grep spigot-1.11.2.jar
if [ $? -eq 0 ]; then
echo "Server is running."
else
echo "$(date): Server is down, restarting..." >> /root/minecraft/MCServerRestartLog.txt
/root/minecraft/start.sh
fi
Обратите внимание на строку с grep spigot-1.11.2.jar — замените её на имя вашего jar-файла. Путь к лог-файлу тоже можно изменить по желанию.
Содержимое start.sh
#!/bin/bash
cd /root/minecraft
screen -dmS minecraft java -Xmx1g -Xms1g -jar spigot-1.11.2.jar
Здесь ключевой момент — параметры памяти -Xmx1g -Xms1g. Выделите столько оперативной памяти, сколько позволяет ваша система. Имя сессии Screen задано как minecraft — запомните его, оно пригодится для подключения к консоли.
После редактирования сохраните файлы и сделайте их исполняемыми:
chmod +x MCServerResetCheck.sh start.sh
Настройка cron для регулярной проверки
Теперь нужно заставить систему автоматически запускать проверку каждые 30 секунд. Для этого мы воспользуемся cron — классическим планировщиком задач в Linux. Откройте редактор crontab:
service cron stop
crontab -e
Вставьте в конец файла следующие строки, предварительно скорректировав путь к рабочей папке:
* * * * * /root/minecraft/MCServerResetCheck.sh
* * * * * ( sleep 30 ; /root/minecraft/MCServerResetCheck.sh )
Первая строка запускает проверку в начале каждой минуты, вторая — с задержкой в 30 секунд. Таким образом, сервер будет проверяться дважды в минуту. Если такая частота кажется избыточной, можно оставить только одну строку — тогда проверка будет выполняться раз в минуту. Для интервала в две минуты замените первую звёздочку на */2, для трёх — на */3 и так далее вплоть до 59 минут.
Не забудьте перезапустить cron, чтобы изменения вступили в силу:
service cron start
Проверка работоспособности
На этом этапе всё должно работать. Чтобы убедиться, что сервер действительно запустился, выполните команду:
screen -r minecraft
Вы попадёте в консоль Minecraft-сервера. Если вы видите привычный вывод логов — всё в порядке. Выйти из сессии Screen, не останавливая процесс, можно комбинацией Ctrl+A, затем D. Теперь сервер будет перезапускаться автоматически при любом падении.
Кстати, если вы параллельно экспериментируете с модификациями на клиентской стороне, удобно держать под рукой современный лаунчер. Например, через foxygame.net можно быстро установить нужные моды прямо из меню — это экономит время и избавляет от ручного копирования файлов, особенно когда сервер уже использует определённый набор плагинов и требует совместимых клиентских дополнений.
Заключение
Автоматический перезапуск сервера Minecraft на Linux — это не роскошь, а базовая необходимость для стабильной игры. Потратив десять минут на настройку Screen и cron, вы навсегда забудете о ручном вмешательстве после крашей. Приведённые скрипты легко адаптируются под любую версию сервера и любые параметры запуска. Логирование в отдельный файл помогает отслеживать историю падений и анализировать причины сбоев. В результате ваш мир работает бесперебойно, а сообщество игроков остаётся довольно — а это главная цель любого администратора.