DGuard

Инструменты

systemd-юнит для сервера Minecraft

Укажите пользователя, папку сервера и скрипт запуска — получите юнит systemd, который поднимает сервер после перезагрузки машины, держит консоль в tmux и при остановке отправляет stop, дожидаясь сохранения мира.

systemd-юнит

Путь от папки сервера или полный. Скрипт соберёт генератор скрипта запуска — без автоперезапуска: его делает systemd.

Сколько ждать сохранения мира после stop. На большом мире и медленном диске — больше.

Перезапуск

/etc/systemd/system/minecraft.service

[Unit]
Description=Minecraft server (minecraft)
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/tmux new-session -d -s mc /opt/minecraft/start.sh
ExecStop=/bin/sh -c 'tmux send-keys -t mc "stop" Enter; while tmux has-session -t mc 2>/dev/null; do sleep 1; done'
TimeoutStopSec=180
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
Сохраните файл, затем выполните команды ниже. Нужен установленный tmux.
Установка и управление
sudo nano /etc/systemd/system/minecraft.service sudo systemctl daemon-reload sudo systemctl enable --now minecraft systemctl status minecraft sudo -u minecraft tmux attach -t mc

Последняя команда открывает консоль сервера; выйти, не выключая его, — Ctrl+B, затем D.

Зачем серверу systemd

Сервер, запущенный прямо в SSH-сессии, выключится вместе с ней. systemd запускает его как службу: при старте машины, без входа на неё, и заново — если процесс завершился. Юнит повторяет схему из нашей статьи о сервере на Linux: консоль живёт в tmux, а к ней можно подключиться в любой момент.

Главное — корректная остановка. При systemctl stop юнит отправляет в консоль stop и ждёт, пока сервер сохранит миры и закроет сессию. TimeoutStopSec — сколько ждать: по истечении systemd завершит процесс принудительно, поэтому на большом мире увеличьте значение.

С Restart=always команда stop из игры работает как перезапуск: systemd поднимет сервер снова через 10 секунд. Чтобы выключить насовсем — systemctl stop. Сервер должен работать от отдельного пользователя без прав root.

Сервер, который сам встаёт после сбоя, — основа. Следующий шаг — защита от читеров: DGuard — лучший античит для современного сервера Minecraft, тратит 0,03 % одного ядра на основном потоке.

Читайте в базе знаний

Частые вопросы

Как сделать автозапуск сервера Minecraft на Linux?

Через юнит systemd: сохраните файл из генератора в /etc/systemd/system/, выполните systemctl daemon-reload и systemctl enable --now с именем сервиса.

Как открыть консоль сервера, запущенного через systemd?

Командой sudo -u <пользователь> tmux attach -t <сессия>. Выйти, не выключая сервер, — Ctrl+B, затем D.

Как корректно выключить сервер?

systemctl stop с именем сервиса: юнит отправит stop и дождётся сохранения мира.

Нужен ли автоперезапуск в скрипте запуска?

Нет: с systemd его делает Restart=. Цикл в скрипте мешал бы остановке — сервер запускался бы снова внутри сессии.

Инструменты бесплатны. Защита от читов — тоже

DGuard — лучший античит для современного сервера Minecraft: ловит все 47 видов читов из нашего сравнения, у ближайшего соперника, Intave, — 27. До 30 игроков онлайн — бесплатно, защита та же, что на платных тарифах.