Pterohost docs

Авторестарт 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.

Создание расписания

  1. Открой панель управления сервером.
  2. Перейди в раздел Schedules (Расписания).
  3. Нажми Create Schedule.
  4. Задай имя, например Auto Restart 6h.
  5. Укажи cron-выражение. Примеры:
РасписаниеCron-выражение
Каждые 6 часов0 0,6,12,18 * * *
Каждые 12 часов0 0,12 * * *
Раз в сутки в 04:000 4 * * *
Каждые 4 часа0 */4 * * *
  1. Сохрани расписание.

Добавление задач в расписание

После создания расписания добавь задачи в нужном порядке:

Задача 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, 1Countdown

Используй цветовой код для видимости. Пример сообщения для 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-сервера. Для 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 хостинг