Автозапуск Minecraft-сервера: служба systemd и cron-задание
После перезагрузки сервера Minecraft-сервер должен запускаться сам. Показываем unit-файл systemd как аккуратное решение и cron-задание с @reboot как альтернативу.
Нужно, чтобы ваш Minecraft-сервер после перезагрузки root-сервера сам возвращался в онлайн, без входа по SSH? Тогда этот материал для вас.
Мы покажем два пути: служебный unit systemd как аккуратное и рекомендуемое решение, а также классическое cron-задание с @reboot как быструю альтернативу. Оба варианта работают во всех распространённых дистрибутивах Linux, то есть в Debian, Ubuntu, AlmaLinux и Rocky Linux.
systemd или cron-задание: какой путь правильный?
Cron-задание с @reboot настраивается быстро, но знает лишь один момент времени: старт системы. Если при этом что-то пойдёт не так или сервер позже упадёт, больше ничего не произойдёт.
Служебный unit systemd — это аккуратный путь, и он даёт сразу несколько преимуществ:
- Сервер стартует только тогда, когда сеть действительно готова, а не по угаданному времени ожидания.
- После сбоя systemd перезапускает сервер автоматически.
- Сервером вы управляете привычными командами
systemctl start,stop,restartиstatus. - Сообщения об ошибках попадают в журнал и доступны через
journalctl.
Поэтому мы рекомендуем путь через systemd. Cron-задание описано ниже как альтернатива для случаев, когда systemd недоступен.
Подготовка: записываем команду запуска, пользователя и каталог
Прежде чем начать, вам понадобятся три сведения из вашей текущей установки:
- Команда запуска из вашего файла «start.sh», то есть, например,
screen -dmS spigot java -Xmx4G -jar spigot.jar - Пользователь, от имени которого работает сервер, в примере «spigot»
- Каталог, в котором лежит файл сервера, в примере
/home/spigot/server
Типичное содержимое start.sh выглядит так:
#Это лишь пример. Используйте содержимое вашего собственного start.sh.
screen -S spigot java -Xmx2G -jar spigot.jar
Важно: для автоматического запуска screen -S обязательно нужно заменить на screen -dmS. Причина: screen -S открывает интерактивную сессию и ожидает терминал. При старте системы терминала нет, поэтому запуск завершился бы ошибкой. screen -dmS, напротив, запускает сессию сразу в фоне.
Если Minecraft-сервер у вас ещё не настроен, сначала поможет наше руководство Установка Minecraft-сервера на Debian.
Создаём служебный unit systemd для Minecraft-сервера
Создание unit-файла
Создайте от имени root новый файл службы:
nano /etc/systemd/system/minecraft.service
Внесите следующее содержимое и приведите пользователя, каталог, объём оперативной памяти и имя файла в соответствие со своей установкой:
[Unit]
Description=Minecraft-Server
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
User=spigot
WorkingDirectory=/home/spigot/server
ExecStart=/usr/bin/screen -dmS spigot java -Xmx4G -jar spigot.jar
ExecStop=/usr/bin/screen -S spigot -X stuff "stop\n"
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.target
Самые важные строки вкратце:
AfterиWantsследят за тем, чтобы сервер стартовал только после того, как сеть станет доступна.Userзадаёт, от имени какого пользователя работает сервер. Никогда не запускайте его от root.WorkingDirectory— это каталог с файлом сервера. Без этого указания Java не найдёт JAR-файл.ExecStopотправляет команду «stop» в screen-сессию. Благодаря этому сервер аккуратно сохраняет мир, вместо того чтобы быть просто убитым.Restart=on-failureавтоматически перезапускает сервер после сбоя, аRestartSecзадаёт время ожидания в секундах.
Сохраните файл сочетанием «Ctrl + X», затем «Y» и «Enter».
Активация и запуск службы
После этого systemd считывает новый файл, включает автозапуск и сразу стартует сервер:
systemctl daemon-reload
systemctl enable --now minecraft
Текущее состояние проверяется командой:
systemctl status minecraft
Если в выводе отображается «active», служба работает. При проблемах точное сообщение об ошибке выдаёт журнал:
journalctl -u minecraft -n 50
Доступ к консоли сервера
Сервер по-прежнему работает в screen-сессии. Поскольку она принадлежит пользователю «spigot», сначала переключитесь на этого пользователя, а затем откройте консоль:
su spigot
screen -r spigot
Сочетанием «Ctrl + A + D» вы выходите из консоли, не завершая сервер.
Остановка и перезапуск сервера
С этого момента сервером вы управляете через systemd:
systemctl stop minecraft
systemctl restart minecraft
Если автозапуск нужно снова отключить, достаточно:
systemctl disable minecraft
Альтернатива: автозапуск через cron-задание с @reboot
Если создавать служебный unit не хочется, автозапуск можно получить и через crontab соответствующего пользователя. Откройте crontab командой:
export VISUAL=nano; crontab -e
Добавьте свою команду запуска последней строкой с префиксом @reboot:
@reboot <содержимое вашего файла start.sh>
#Примерно так должен выглядеть параметр запуска, у вашего стартового скрипта он может отличаться.
@reboot screen -dmS <имя-screen-сессии> java -Xmx<AMOUNT>G -jar <каталог и имя файла Minecraft-сервера>.jar
#ПРИМЕР:
@reboot screen -dmS spigot java -Xmx2G -jar /home/spigot/spigot.jar
Следите и здесь за тем, чтобы использовался screen -dmS, а не screen -S. Как таким же способом запускать при старте сервера любые другие приложения и скрипты, показывает наше руководство Автоматический запуск программ при старте сервера.
Проверка автозапуска
Не полагайтесь на то, что конфигурация верна, а осознанно проверьте её один раз. Перезагрузите сервер:
reboot
Подождите одну-две минуты, снова войдите по SSH и проверьте командой systemctl status minecraft или screen -ls, работает ли Minecraft-сервер снова. Дополнительно подключитесь игровым клиентом, чтобы убедиться, что сервер действительно доступен.
Частые ошибки при автозапуске
- screen -S вместо screen -dmS: самая частая ошибка с большим отрывом. Без
-dmсервер при загрузке не стартует. - Неверный каталог: Java не находит JAR-файл. Проверьте
WorkingDirectoryили укажите в cron-задании полный путь к JAR-файлу. - Неверный пользователь: если служба работает от root, вновь созданные файлы мира затем принадлежат root, и собственный пользователь сервера больше не может в них писать.
- Слишком мало оперативной памяти: если значение после
-Xmxбольше, чем объём свободной оперативной памяти, ядро завершает процесс Java вскоре после старта.
Частые вопросы
systemd или cron-задание: что выбрать?
Почему screen -S нужно менять на screen -dmS?
Как попасть в консоль сервера после автоматического запуска?
Перезапустит ли systemd мой сервер после сбоя?
Как проверить, что автозапуск действительно работает?
2024-2026 KernelHost GmbH. Все права защищены. Эта инструкция охраняется авторским правом. Публикация на других сайтах, в том числе частично или в изменённом виде, без нашего письменного согласия не разрешается. Цитирование с указанием источника и активной ссылкой мы приветствуем.

