Авторестарт Minecraft-сервера по расписанию
Как настроить авторестарт Minecraft-сервера: плагины, cron, скрипты, предупреждения игрокам и корректное сохранение мира.
Кратко: Авторестарт решает проблему утечек памяти и накопленных лагов без ручного вмешательства. Самый простой путь - плагин AutoRestart или расписание в Pterodactyl-панели с командами /save-all и /stop.
Авторестарт Minecraft-сервера по расписанию
Любой Minecraft-сервер со временем деградирует: плагины накапливают утечки памяти, chunk-кэш разрастается, entity-спам засоряет память - и через 12-24 часа непрерывной работы TPS падает с 20 до 15 и ниже. Регулярный перезапуск по расписанию - стандартная практика для серверов с 2016 года, и в 2026 году это по-прежнему один из самых дешёвых способов поддерживать стабильную производительность. Грамотно настроенный авторестарт предупреждает игроков заранее, корректно сохраняет мир и поднимает сервер обратно без участия администратора. В этой статье разберём все актуальные способы: плагины, cron-расписание через панель и bash-скрипт с автоматическим перезапуском процесса.
Pterohost - игровой хостинг Minecraft с NVMe-дисками, защитой от DDoS и поддержкой 24/7. Промокод 4START даёт -20% на первый заказ. Заказать Minecraft хостинг
Зачем вообще нужен авторестарт
Minecraft-сервер - это JVM-процесс, который работает непрерывно. Со временем в нём накапливается несколько типичных проблем:
Утечки памяти в плагинах. Даже популярные плагины не всегда идеально освобождают память. Каждый новый игрок, загруженный чанк или сработавший ивент может оставлять в heap мусор, который garbage collector не успевает собрать. Через 12-24 часа работы heap-использование ползёт вверх, и сервер начинает тормозить на GC-паузах.
Накопленный entity-спам. Мобы, дропнутые предметы, стрелы, частицы - всё это копится в памяти. На активных серверах через несколько часов игры entity-count может вырасти в 3-5 раз по сравнению с чистым стартом.
Фрагментация chunk-кэша. Загруженные и выгруженные чанки оставляют фрагменты в памяти. JVM не возвращает память ОС немедленно, и через сутки непрерывной работы сервер может занимать в 1.5-2 раза больше RAM, чем сразу после старта.
Накопленные временные файлы и логи. Логирование, временные данные плагинов, кэши - всё это растёт. Перезапуск ротирует логи и очищает временные состояния.
Практический ориентир: сервер на 20-30 игроков с 30-50 плагинами оптимально рестартовать каждые 6-8 часов. Небольшой сервер на 5-10 игроков с минимальным набором плагинов справится с рестартом раз в 12-24 часа.
Способ 1 - Плагин AutoRestart (Paper/Spigot)
AutoRestart - один из самых популярных плагинов для автоматического перезапуска, стабильно поддерживается в 2026 году для Paper 1.20+ и 1.21+. Устанавливается как обычный плагин в папку plugins/.
Установка
Скачай актуальную версию с Hangar (официальный репозиторий Paper-проекта) или Modrinth:
https://hangar.papermc.io/PaperMC/AutoRestart
Положи JAR в plugins/ и перезапусти сервер. Плагин создаст конфиг plugins/AutoRestart/config.yml.
Основные параметры конфига
# plugins/AutoRestart/config.yml
# Время рестарта в формате HH:MM (24-часовой)
restart-times:
- "04:00"
- "10:00"
- "16:00"
- "22:00"
# Предупреждения перед рестартом (в секундах)
warnings:
- 900 # 15 минут
- 600 # 10 минут
- 300 # 5 минут
- 180 # 3 минуты
- 60 # 1 минута
- 30 # 30 секунд
- 10 # 10 секунд
- 5
- 4
- 3
- 2
- 1
# Сообщение игрокам
broadcast-message: "&c[Сервер] &fАвторестарт через &c%time%&f. Сохраните прогресс!"
# Команда для остановки (рекомендуется restart, а не stop)
restart-command: "restart"
# Сохранить мир перед рестартом
save-before-restart: true
После редактирования конфига выполни /autorestart reload в консоли или перезапусти сервер.
Команды плагина
| Команда | Описание |
|---|---|
/autorestart reload | Перезагрузить конфиг |
/autorestart now | Запустить рестарт немедленно |
/autorestart cancel | Отменить текущий обратный отсчёт |
/autorestart status | Показать время следующего рестарта |
/autorestart in 30m | Запланировать рестарт через 30 минут |
Способ 2 - Стандартная команда /restart (Bukkit API)
Начиная с Bukkit 1.8, в API есть встроенная команда /restart. Она работает корректно только если в spigot.yml (или paper-global.yml для Paper) настроен restart-script:
# spigot.yml
settings:
restart-on-crash: true
restart-script: ./start.sh
Файл start.sh должен лежать рядом с server.jar и содержать команду запуска:
#!/bin/bash
java -Xms2G -Xmx4G -jar server.jar --nogui
Дай скрипту права на исполнение:
chmod +x start.sh
После этого команда /restart в консоли корректно остановит сервер и запустит его заново через start.sh. Это же используют все плагины, которые вызывают рестарт через Bukkit API.
Способ 3 - Bash-скрипт с циклом while
Если хостинг предоставляет доступ к оболочке (VPS, выделенный сервер), можно обойтись без плагинов - написать скрипт-обёртку, который автоматически поднимает сервер после любого завершения процесса.
Базовый скрипт start.sh
#!/bin/bash
# Рабочая папка сервера
SERVER_DIR="/home/minecraft/server"
JAR="server.jar"
JAVA_OPTS="-Xms2G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled"
cd "$SERVER_DIR" || exit 1
echo "=== Minecraft Server Wrapper ==="
echo "Старт: $(date)"
while true; do
echo "[$(date)] Запуск сервера..."
java $JAVA_OPTS -jar "$JAR" --nogui
EXIT_CODE=$?
echo "[$(date)] Сервер завершился с кодом $EXIT_CODE"
# Если сервер завершился с кодом 0 (нормальная остановка через /stop)
# - выходим из цикла, не перезапускаем
if [ $EXIT_CODE -eq 0 ]; then
echo "Нормальная остановка. Не перезапускаем."
break
fi
echo "Перезапуск через 10 секунд..."
sleep 10
done
Этот скрипт перезапускает сервер при крашах (код завершения != 0), но не перезапускает при штатной остановке через /stop. Это безопасное поведение.
Скрипт с плановым рестартом по расписанию
Для рестарта по времени без плагинов используем связку: скрипт-обёртка + cron, который посылает сигнал SIGTERM процессу Java.
Сначала создадим скрипт для корректной остановки через RCON или через screen/tmux:
#!/bin/bash
# restart-minecraft.sh - вызывается из cron
# Отправить команду save-all и stop через screen-сессию
SCREEN_NAME="minecraft"
# Сохранить мир
screen -S "$SCREEN_NAME" -X stuff "say [Сервер] Рестарт через 60 секунд. Сохраните прогресс!$(printf '\r')"
sleep 55
screen -S "$SCREEN_NAME" -X stuff "say [Сервер] Рестарт через 5 секунд!$(printf '\r')"
sleep 5
screen -S "$SCREEN_NAME" -X stuff "save-all$(printf '\r')"
sleep 3
screen -S "$SCREEN_NAME" -X stuff "stop$(printf '\r')"
echo "Команда stop отправлена в $(date)"
Добавь в crontab (команда crontab -e):
# Рестарт каждые 6 часов: в 00:00, 06:00, 12:00, 18:00
0 0,6,12,18 * * * /home/minecraft/restart-minecraft.sh >> /home/minecraft/restart.log 2>&1
Скрипт-обёртка start.sh с циклом while true при этом автоматически поднимет сервер после stop.
Способ 4 - Расписание через панель Pterodactyl
Если сервер работает на Pterodactyl (как у Pterohost), авторестарт настраивается прямо в веб-интерфейсе без доступа к консоли Linux.
Создание расписания
- Открой панель управления сервером.
- Перейди в раздел Schedules (Расписания).
- Нажми Create Schedule.
- Задай имя, например
Auto Restart 6h. - Укажи cron-выражение. Примеры:
| Расписание | Cron-выражение |
|---|---|
| Каждые 6 часов | 0 0,6,12,18 * * * |
| Каждые 12 часов | 0 0,12 * * * |
| Раз в сутки в 04:00 | 0 4 * * * |
| Каждые 4 часа | 0 */4 * * * |
- Сохрани расписание.
Добавление задач в расписание
После создания расписания добавь задачи в нужном порядке:
Задача 1 - предупреждение игрокам:
- Action: Send Command
- Payload:
say [Сервер] Авторестарт через 5 минут. Сохраните прогресс! - Time Offset: 0 секунд
Задача 2 - предупреждение за 1 минуту:
- Action: Send Command
- Payload:
say [Сервер] Рестарт через 1 минуту! - Time Offset: 240 секунд (4 минуты после задачи 1)
Задача 3 - сохранение мира:
- Action: Send Command
- Payload:
save-all - Time Offset: 300 секунд (ещё через 1 минуту)
Задача 4 - остановка сервера:
- Action: Send Command
- Payload:
stop - Time Offset: 5 секунд
Задача 5 - запуск сервера:
- Action: Power Action -> Start
- Time Offset: 15 секунд
Pterodactyl сам выполнит все задачи по очереди, а встроенный watchdog поднимет сервер после stop.
Корректное сохранение мира перед рестартом
Самая распространённая ошибка - убить процесс Java через kill -9 или Power Kill без предварительного сохранения. Это гарантированно приводит к потере данных за последние несколько минут и возможной порче region-файлов.
Правильная последовательность остановки:
1. say [Сервер] Рестарт через N минут
2. ... (ждём)
3. save-all # принудительное сохранение всех чанков
4. (ждём 3-5 секунд, пока flush завершится)
5. stop # корректная остановка через Bukkit shutdown hook
Команда save-all flush (доступна в Paper) блокирует выполнение до полной записи на диск:
save-all flush
Это особенно важно на серверах с save-interval > 6000 тиков (стандартное значение) или с отключённым автосохранением (save-off).
Дополнительно рекомендуется включить sync-chunk-writes: true в paper-world.yml - это гарантирует синхронную запись чанков:
# paper-world.yml (глобальные настройки)
chunks:
sync-chunk-writes: true
Предупреждения игрокам - лучшие практики
Никто не любит, когда сервер внезапно падает без предупреждения. Грамотные предупреждения снижают негатив и дают игрокам время завершить дела:
Рекомендуемая схема предупреждений:
| Время до рестарта | Сообщение |
|---|---|
| 15 минут | Информационное - “сервер перезапустится через 15 минут” |
| 10 минут | Напоминание - особенно важно для игроков в PvP/рейдах |
| 5 минут | Призыв сохраниться, выйти из боёв |
| 3 минуты | Срочное предупреждение |
| 1 минута | Финальное - “немедленно завершите дела” |
| 30 секунд | Обратный отсчёт |
| 10, 5, 4, 3, 2, 1 | Countdown |
Используй цветовой код для видимости. Пример сообщения для config.yml плагина:
messages:
countdown: "&c&l[!] &r&fСервер перезапустится через &c&l%time%&r&f. Завершите дела!"
restarting: "&4&l>>> СЕРВЕР ПЕРЕЗАПУСКАЕТСЯ <<<&r"
На серверах с ActionBar или Title-плагинами можно дополнительно выводить таймер в title-экране - это гораздо заметнее, чем текст в чате.
Авторестарт при краше - watchdog и supervisor
Плановый рестарт по расписанию - это одна задача. Но сервер может упасть внезапно: OOM-killer завершил процесс, плагин вызвал segfault, JVM нарвалась на ошибку. Здесь нужен watchdog - инструмент, который следит за процессом и поднимает его при падении.
Systemd (для VPS и dedicated)
Создай unit-файл /etc/systemd/system/minecraft.service:
[Unit]
Description=Minecraft Server
After=network.target
[Service]
User=minecraft
WorkingDirectory=/home/minecraft/server
ExecStart=/bin/bash /home/minecraft/start.sh
Restart=on-failure
RestartSec=10s
# Не перезапускать при нормальном завершении (код 0)
SuccessExitStatus=0
[Install]
WantedBy=multi-user.target
Активируй и запусти:
systemctl daemon-reload
systemctl enable minecraft
systemctl start minecraft
При крашах systemd автоматически перезапустит сервер через 10 секунд. Нормальная остановка через /stop (код 0) перезапуск не вызовет.
Встроенный watchdog Paper
Paper имеет встроенный watchdog, который перезапускает сервер при зависании (freeze). Настройка в paper-global.yml (Paper 1.19+):
# paper-global.yml
watchdog:
early-warning-every: 5000 # предупреждение каждые 5 сек при зависании
early-warning-delay: 10000 # начинать предупреждать через 10 сек зависания
А в spigot.yml убедись, что включён timeout-kill:
# spigot.yml
settings:
timeout-time: 60 # через 60 сек зависания - убить процесс
restart-on-crash: true
restart-script: ./start.sh
Типичные ошибки при настройке авторестарта
Ошибка 1: kill -9 без сохранения. Никогда не убивай Java-процесс через SIGKILL напрямую. Всегда отправляй save-all перед остановкой.
Ошибка 2: слишком частый рестарт. Рестарт каждые 30-60 минут раздражает игроков и не даёт сыграть нормальную сессию. Минимальный адекватный интервал - 3-4 часа.
Ошибка 3: рестарт в пиковые часы. Планируй рестарт на ночные часы (01:00-06:00 по московскому времени) или ранние утренние. Проверь по статистике онлайна, когда на сервере меньше всего игроков.
Ошибка 4: нет скрипта перезапуска. Если restart-script не настроен в spigot.yml, команда /restart просто остановит сервер и не поднимет его обратно.
Ошибка 5: рестарт через /reload. Команда /reload не является заменой рестарту - она перезагружает плагины, но не очищает JVM heap. Утечки памяти при этом не устраняются. Начиная с Paper 1.16, /reload и вовсе выводит предупреждение о нестабильности.
Связанные материалы
Для полноценного обслуживания сервера авторестарт работает в связке с резервными копиями и оптимизацией. Читай подробнее:
- Резервное копирование Minecraft-сервера - как настроить автобэкапы перед рестартом, чтобы всегда иметь актуальную копию мира.
- Оптимизация Minecraft-сервера - что ещё можно сделать для снижения лагов помимо регулярных рестартов.
- Устранение лагов Minecraft-сервера - диагностика и исправление причин TPS-дропа, которые рестарт не решает.
Заключение
Авторестарт - это простая и эффективная мера поддержки стабильности Minecraft-сервера. Для Paper/Spigot-серверов оптимальный путь - плагин AutoRestart с настроенными предупреждениями и корректной остановкой через save-all + stop. На Pterodactyl всё это настраивается через раздел Schedules без единой строки кода. Ключевые правила: рестартуй каждые 6-12 часов, предупреждай игроков за 15 минут, всегда выполняй save-all перед остановкой и убедись, что скрипт start.sh настроен для автоподъёма. Добавь watchdog через systemd или встроенный механизм Paper - и сервер будет автоматически восстанавливаться даже при неожиданных падениях.
Pterohost - надёжный хостинг Minecraft с NVMe SSD, защитой от DDoS-атак и поддержкой 24/7 - настрой авторестарт прямо через панель без лишних команд. Промокод 4START даёт -20% на первый заказ. Заказать Minecraft хостинг