Автоперезапуск сервера Minecraft — не костыль, а нормальная эксплуатационная практика. Java со временем накапливает фрагментацию кучи, плагины подтекают, сущности копятся, и сервер, проработавший неделю без остановки, почти всегда медленнее того же сервера через час после старта. Плюс рестарт — единственный способ применить половину конфигов и подхватить обновления плагинов.
Вопрос только в том, как перезапускать: чтобы игроков предупредили, мир сохранился, а если что-то пойдёт не так — сервер поднялся сам.
Как часто нужен автоперезапуск сервера Minecraft
Ориентиры из практики:
- Ванильная или лёгкая выживалка на 20–30 человек — раз в сутки, ночью.
- Сборка модов на Forge/Fabric с 150+ модами — каждые 6–8 часов, они текут заметно сильнее.
- Крупный проект с минииграми и прокси — раз в сутки бэкенды по очереди, прокси реже.
- Технический или анархия-сервер с тяжёлыми фермами — раз в 12 часов.
Ночь по времени основной аудитории, а не по UTC. Для российского проекта разумное окно — 5:00–6:00 по Москве, там онлайн минимальный.
Если сервер приходится рестартить чаще двух раз в сутки, чтобы держать TPS, — это не решение, а симптом. Сначала посмотрите, что показывает Spark.
Способ первый: планировщик в панели
Самый простой и самый надёжный вариант для хостинга. В панели управления есть планировщик задач, где создаётся расписание в формате cron и выбирается действие — Power: Restart, отправка команды в консоль или запуск бэкапа.
Практичная схема из трёх задач:
55 4 * * * команда: say Перезапуск сервера через 5 минут
59 4 * * * команда: save-all
0 5 * * * действие: RestartОбратите внимание на save-all перед рестартом: Paper сохраняет мир и сам, но лишняя явная запись стоит копейки и страхует от потери последних минут.
Подробнее про синтаксис и особенности планировщика — в заметке про cron в панели.
Способ второй: restart-script в spigot.yml
У Spigot и Paper есть встроенный механизм. В spigot.yml (раздел settings, справочник PaperMC):
settings:
restart-script: ./start.sh
restart-on-crash: trueПосле этого работает команда /restart: сервер корректно останавливается, сохраняет мир и запускает указанный скрипт. Плюс — restart-on-crash вызывает этот скрипт, если сервер завис и его остановил watchdog. Если процесс убила операционная система (например, OOM-killer), скрипт не сработает.
Есть нюанс: на панельных хостингах контейнер обычно управляется снаружи, и запуск скрипта изнутри может конфликтовать с супервизором. Проверьте на тестовом рестарте, что сервер поднялся именно один раз, а не двумя процессами на одном порту — иначе получите в логах Failed to check session lock.
Способ третий: плагин с предупреждениями
Голый рестарт по расписанию раздражает игроков: только что строил, и вдруг дисконнект. Плагины вроде UltimateAutoRestart, AutoRestart или ServerRestarter решают это нормальным обратным отсчётом.
Типовой конфиг:
restart-times:
- "05:00"
- "17:00"
warnings:
- 600
- 300
- 60
- 30
- 10
- 5
- 3
- 2
- 1
message: "&eПерезапуск через &c%time%&e. Сохраните постройки."
title-enabled: true
kick-message: "&aСервер перезапускается, вернитесь через минуту."
commands-before:
- "save-all"Ключевое здесь — commands-before. Туда же можно повесить выключение автосохранения тяжёлых плагинов или выгрузку данных экономики, если они пишутся не сразу.
Отдельный плюс плагинов: у большинства есть отсрочка при непустом сервере или наоборот принудительный рестарт только когда онлайн ноль. Второй вариант хорош для небольших приватных серверов.
Способ четвёртый: systemd
На своём VPS правильнее отдать управление системе. Юнит выглядит так:
[Unit]
Description=Minecraft server
After=network.target
[Service]
User=minecraft
WorkingDirectory=/opt/mc
ExecStart=/usr/bin/java -Xms6G -Xmx6G -jar paper.jar nogui
Restart=always
RestartSec=15
[Install]
WantedBy=multi-user.targetRestart=always поднимет сервер после любого падения, а плановый рестарт вешается на таймер systemd или обычный crontab:
0 5 * * * systemctl restart minecraftПодробный разбор запуска через systemd и screen есть в отдельной статье.
Чего избегать
Kill вместо stop. Если задача в планировщике настроена как принудительная остановка, мир не успевает записаться. Всегда используйте graceful stop с таймаутом хотя бы 30 секунд.
Рестарт сразу после бэкапа. Бэкап читает файлы мира, рестарт их перезаписывает. Разведите задачи минимум на 10–15 минут. Как настроить сами копии, описано в заметке про автобэкапы в панели.
Рестарт-петля. Если сервер падает на старте, Restart=always в systemd превратит это в бесконечный цикл, который забьёт диск логами за пару часов. При настройке автозапуска обязательно проверьте, что стартует чисто, и потом раз в неделю заглядывайте в логи.
Слишком частые рестарты. Каждый старт — это загрузка чанков спавна, инициализация плагинов и холодный JIT. Первые две-три минуты после запуска сервер работает медленнее, чем через полчаса. Рестарт каждые два часа приносит больше вреда, чем пользы.
Проверка, что всё работает
Не ждите ночи. Поставьте тестовое расписание на ближайшие пять минут, зайдите на сервер и посмотрите:
- приходят ли предупреждения в чат;
- корректно ли кикает с нужным сообщением;
- сколько секунд занимает полный цикл (норма — 20–60 секунд, у больших модпаков до 3 минут);
- нет ли в логе ошибок при загрузке после старта;
- на месте ли последние постройки и вещи в инвентаре.
Потом верните боевое расписание.
Итог
Минимальный рабочий набор: одна ночная перезагрузка через планировщик панели, плагин с обратным отсчётом для предупреждений, save-all перед остановкой и разнесённые по времени бэкапы. На своём VPS добавьте Restart=always в systemd, чтобы сервер поднимался и после аварий.
Если бэкенд у вас не один, а несколько за прокси, планируйте рестарты со сдвигом в 10 минут — тогда игроков будет перекидывать на живые серверы, а не выбрасывать в лобби всех разом. Готовые машины с планировщиком и автобэкапами из коробки — на странице тарифов.