Инструменты
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
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 игроков онлайн — бесплатно, защита та же, что на платных тарифах.