Всем привет, в данной статье я постараюсь максимально подробно описать, как запустить сервер Minecraft как службу на сервере с Linux.
Данная служба будет автоматически отслеживать падения сервера, поднимать Minecraft сервер после перезагрузки физического сервера (ну или виртуальной машины), а также позволит администраторам легко и корректно перезапускать сервер используя команду /stop из консоли сервера или игры.
Все действия я выполнял на Ubuntu 24.04, но актуально практически для всех дистрибутивов (за исключением установки пакетов через apt). Это гайд именно для Linux-систем!
Вообще рекомендуется запускать Minecraft-сервер (как и другие любые другие службы) от имени специально предназначенного для этого пользователя, который будет иметь ограниченные права и не входить в группу суперпользователей, что не позволит злоумышленникам в случае получения контроля над данным пользователем сильно напакостить, да и сам процесс java будет запущен безопасно.
Создайте linux-пользователя minecraft. Помещать его в группу sudo/wheel НЕ нужно! Как это сделать я напишу в данную статью чуть позднее, поэтому надеюсь что вы знаете как это делать, либо способны найти в интернетах инструкцию, коих написано нереально много. После создания пользователя логиньтесь под своим основным пользователем с правами суперпользователя.
Во-первых для того чтобы у нас был интерактивный доступ в консоль нам будет необходим screen.
Обновим список доступных пакетов и установим screen используя команду:
Надеюсь нужная версия Java у вас уже установлена, а если нет, то установить JDK 21 можно используя команду:
Я буду настраивать запуск сервера Purpur. Если запускаете другое ядро, то внимательно читайте комментарии.
Помещаем файлы сервера в каталог /home/minecraft/server/
Создаем файл start.sh со следующим содержимым. Замените purpur-1.21.3-2355.jar на имя вашего jar-файла сервера
Теперь создадим скрипт для завершения работы сервера, который будет отрабатывать при завершении службы. Для имени файла server.jar используйте "java.*server" вместо "java.*purpur".
Разрешаем запуск start.sh и stop.sh:
Создаем файл службы командой:
И вставляем туда следующее содержимое:
Обновляем службы командой:
Добавляем службу minecraft в автозапуск:
На всякий случай рекурсивно меняем владельца каталога minecraft на пользователя minecraft:
Запускаем службу minecraft следующей командой:
И проверяем через секунд 10-15 ее статус:
Для выхода из проверки статуса используйте сочетание клавиш Ctrl+C. Если все запустилось корректно, то вы увидите примерно следующий вывод:
Для завершения работы сервера используйте команду:
Для подключения к консоли сервера сначала переключитесь на пользователя minecraft:
А затем введите команду
Для выхода из консоли на английской раскладке нажмите Ctrl+A и затем D. Для входа в режим прокрутки используйте Ctrl+A и затем Esc. Для выхода из режима прокрутки повторно нажмите Esc.
Затем, чтобы выйти из сеанса пользователя minecraft и вернуться к своему основному пользователю выполните команду:
Для завершения работы сервера используйте команду:
Теперь ваш сервер будет постоянно активен, в случае завершения его работы по любой причине, кроме остановки через
Данная служба будет автоматически отслеживать падения сервера, поднимать Minecraft сервер после перезагрузки физического сервера (ну или виртуальной машины), а также позволит администраторам легко и корректно перезапускать сервер используя команду /stop из консоли сервера или игры.
Все действия я выполнял на Ubuntu 24.04, но актуально практически для всех дистрибутивов (за исключением установки пакетов через apt). Это гайд именно для Linux-систем!
Вообще рекомендуется запускать Minecraft-сервер (как и другие любые другие службы) от имени специально предназначенного для этого пользователя, который будет иметь ограниченные права и не входить в группу суперпользователей, что не позволит злоумышленникам в случае получения контроля над данным пользователем сильно напакостить, да и сам процесс java будет запущен безопасно.
Создайте linux-пользователя minecraft. Помещать его в группу sudo/wheel НЕ нужно! Как это сделать я напишу в данную статью чуть позднее, поэтому надеюсь что вы знаете как это делать, либо способны найти в интернетах инструкцию, коих написано нереально много. После создания пользователя логиньтесь под своим основным пользователем с правами суперпользователя.
Шаг 1. Установка необходимых пакетов
Заходим на наш Linux-сервер под пользователем с правами на sudo (не рекомендуется использовать учетную запись root для настройки).Во-первых для того чтобы у нас был интерактивный доступ в консоль нам будет необходим screen.
Обновим список доступных пакетов и установим screen используя команду:
Bash:
sudo apt update && sudo apt install screen -y
Bash:
sudo apt install openjdk-21-jdk -y
Шаг 2. Настройка скрипта запуска и завершения работы Minecraft-сервера
Сервер мы будем запускать исключительно как службу, поэтому для ручного/тестового запуска в дальнейшем можете переименовать ваш текущий start.sh в run.sh или что-то подобное. Тот start.sh что мы с вами сделаем не будет предназначен для запуска напрямую из терминала!!!Я буду настраивать запуск сервера Purpur. Если запускаете другое ядро, то внимательно читайте комментарии.
Помещаем файлы сервера в каталог /home/minecraft/server/
Создаем файл start.sh со следующим содержимым. Замените purpur-1.21.3-2355.jar на имя вашего jar-файла сервера
Bash:
#!/bin/bash
# Директория с Minecraft сервером
SERVER_DIR="/home/minecraft/server"
cd $SERVER_DIR
# Проверка, занят ли порт 25565
check_port() {
if lsof -i:25565 >/dev/null; then
echo "Порт 25565 занят. Пытаюсь завершить процесс, который его использует..."
kill -9 $(lsof -t -i:25565)
sleep 2
fi
}
# Запуск Minecraft сервера в сессии screen
start_server() {
check_port
echo "Запуск Minecraft сервера..."
# Запуск сервера в фоновом процессе с использованием screen. Сюда можете добавить необходимые java-ключи и изменить название файла ядра
screen -dmS minecraft java -Duser.timezone=Europe/Moscow --add-modules=jdk.incubator.vector -jar purpur-1.21.3-2355.jar --nogui
echo "Сервер работает. Вы можете подключиться к консоли с помощью 'screen -r minecraft'."
}
# Проверка активности порта (когда сервер завершится)
check_server_status() {
echo "Ожидаем, пока сервер займет порт 25565..."
sleep 10
server_running=false
while true; do
if lsof -i:25565 >/dev/null; then
if [ "$server_running" = false ]; then
echo "Сервер работает."
server_running=true
fi
sleep 5
else
echo "Сервер завершился, перезапуск через 5 секунд..."
sleep 5
break
fi
done
}
# Основной цикл для перезапуска сервера
while true; do
start_server
check_server_status
done
Bash:
#!/bin/bash
# Директория с Minecraft сервером
SERVER_DIR="/home/minecraft/server"
cd $SERVER_DIR
# Отправляем команду stop в консоль Minecraft через screen
screen -S minecraft -X stuff "$(echo -ne '\r')stop$(echo -ne '\r')"
# Ждем завершения процесса Purpur.
while pgrep -f "java.*purpur" > /dev/null; do
sleep 1
done
# После завершения процесса закрываем screen
screen -S minecraft -X quit
exit 0
Bash:
sudo chmod +x /home/minecraft/server/start.sh && sudo chmod +x /home/minecraft/server/stop.sh
Шаг 3. Создаем службу и настраиваем права
Создаем файл службы командой:
Bash:
sudo nano /etc/systemd/system/minecraft.service
Код:
[Unit]
Description=Minecraft server
After=network.target
[Service]
User=minecraft
WorkingDirectory=/home/minecraft/server
ExecStart=/bin/bash /home/minecraft/server/start.sh
ExecStop=/usr/bin/bash /home/minecraft/server/stop.sh
TimeoutStopSec=300
KillMode=process
KillSignal=SIGTERM
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Bash:
sudo systemctl daemon-reload
Bash:
sudo systemctl enable minecraft.service
На всякий случай рекурсивно меняем владельца каталога minecraft на пользователя minecraft:
Bash:
sudo chown -R minecraft:minecraft /home/minecraft/
Шаг 4. Запускаем службу и проверяем ее статус
Запускаем службу minecraft следующей командой:
Bash:
sudo systemctl start minecraft
Bash:
sudo systemctl status minecraft
Bash:
● minecraft.service - Minecraft server
Loaded: loaded (/etc/systemd/system/minecraft.service; enabled; preset: enabled)
Active: active (running) since Tue 2024-12-10 14:46:44 MSK; 1h 2min ago
Main PID: 18616 (bash)
Tasks: 94 (limit: 11848)
Memory: 3.4G (peak: 3.4G)
CPU: 1min 43.023s
CGroup: /system.slice/minecraft.service
├─18616 /bin/bash /home/minecraft/server/start.sh
├─18619 SCREEN -dmS minecraft java -Duser.timezone=Europe/Moscow --add-modules=jdk.incub...>
├─18621 java -Duser.timezone=Europe/Moscow --add-modules=jdk.incubator.vector -jar purpu...>
└─21544 sleep 5
Dec 10 14:46:44 zxcmcserver systemd[1]: minecraft.service: Scheduled restart job, restart counter is at 1.
Dec 10 14:46:44 zxcmcserver systemd[1]: Started minecraft.service - Minecraft server.
Dec 10 14:46:44 zxcmcserver bash[18616]: Запуск Minecraft сервера...
Dec 10 14:46:44 zxcmcserver bash[18616]: Сервер работает. Вы можете подключиться к консоли с помощью 'screen -r min...'
Dec 10 14:46:44 zxcmcserver bash[18616]: Ожидаем, пока сервер займет порт 25565...
Dec 10 14:46:54 zxcmcserver bash[18616]: Сервер работает.
Для завершения работы сервера используйте команду:
Bash:
sudo systemctl stop minecraft
Для подключения к консоли сервера сначала переключитесь на пользователя minecraft:
Bash:
sudo su - minecraft
Bash:
screen -r minecraft
Затем, чтобы выйти из сеанса пользователя minecraft и вернуться к своему основному пользователю выполните команду:
Bash:
exit
Для завершения работы сервера используйте команду:
Bash:
sudo systemctl stop minecraft
Теперь ваш сервер будет постоянно активен, в случае завершения его работы по любой причине, кроме остановки через
sudo systemctl stop minecraft
сервер будет автоматически перезапускаться. Спасибо за прочтение.