Я установил экземпляр Ubuntu 18.04 для использования в качестве частного сервера Minecraft Bedrock.
Я скачал сам сервер с https://www.minecraft.net/en-us/download/server/bedrock/
Я могу запустить его прямо из оболочки, и все работает нормально. Однако я бы хотел настроить его как службу, чтобы он запускался автоматически при загрузке и плавно останавливался и т. Д.
Исполняемый файл "bedrock_server" запускается на переднем плане и ожидает различных команд из стандартного in, таких как "стоп", "удар", "сохранение" и т. Д.
Есть ли способ настроить сценарий службы, чтобы им можно было управлять так ...
$ service minecraft stop
$ service minecraft restart
Было бы даже лучше, если бы я мог выдавать и другие команды, специфичные для Minecraft, такие как ...
$ service minecraft kick [player name or xuid]
и т.п.
Однако меня не слишком беспокоит эта возможность. Главное, чего я хочу, - это иметь возможность правильно запускать его при загрузке сервера и плавно останавливаться.
Мне не нужно, чтобы это было полностью написано для меня. Было бы здорово, если бы кто-нибудь мог направить меня к руководству, шаблону или чему-то еще.
Это полная команда, которую я сейчас использую для запуска из оболочки ...
$ cd /home/[my-user]/bedrock-server-1.14.60.5 && LD_LIBRARY_PATH=. ./bedrock_server
Обновить...
Основываясь на ответе ниже и большом количестве проб и ошибок, я придумал этот сценарий systemd ...
[Unit]
Description=Minecraft Bedrock Service
After=network-online.target
[Service]
User=[my-user]
WorkingDirectory=/home/[my-user]/bedrock-server-1.14.60.5
Type=forking
ExecStart=/usr/bin/screen -dmS UbuntuMinecraft /bin/bash -c "LD_LIBRARY_PATH=. ./bedrock_server"
ExecStop=/usr/bin/screen -Rd UbuntuMinecraft -X stuff "say Stopping server in 10 seconds...\r"
ExecStop=/bin/sleep 10
ExecStop=/usr/bin/screen -Rd UbuntuMinecraft -X stuff "stop\r"
GuessMainPID=no
TimeoutStartSec=600
[Install]
WantedBy=multi-user.target
Кажется, это работает очень хорошо.
Если мне нужно запустить другие команды на сервере, я могу подключиться к сеансу экрана вот так ...
$ screen -R UbuntuMinecraft
Затем я могу запускать любые нужные мне собственные команды.
Я частично основал свое решение на этом коде ... https://github.com/TheRemote/MinecraftBedrockServer
Скрипты инициализации различаются в зависимости от того, какую версию дистрибутива вы используете, но я считаю, что в большинстве современных версий Ubuntu используется systemd. Итак, что вы, вероятно, хотите Systemd файл.
Файлы Systemd соответствуют стандартному формату, в котором вам в основном нужно подставлять правильные значения в.
Я не тестировал это, но, следуя стандартному синтаксису, вам нужно что-то вроде этого:
[Unit]
Description=Minecraft Service
After=network.target
[Service]
Type=Simple
WorkingDirectory=/home/user/bedrock-server-1.14.60.5
ExecStart=/bin/sh -c "LD_LIBRARY_PATH=. ./bedrock_server"
Restart=on-failure
[Install]
WantedBy=multi-user.target
Есть здесь можно настроить разные вещи, Такие как TimeoutStopSec
который позволяет вам настроить, сколько времени остается для завершения работы службы при запуске команды «стоп», прежде чем она прервет процесс.
Если вы поместите файл в нужную папку для вашего дистрибутива (/ etc / systemd / system), вы сможете управлять службой с помощью команды systemctl или service.
Если вы создали службу с именем minecraft, вы сможете использовать такие команды, как:
systemctl status minecraft
- получить текущий статус
systemctl starts minecraft
- запустить сервис
systemctl stop minecraft
- остановить службу
systemctl enable minecraft
- запустить эту службу при загрузке
Что касается возможности запускать консольные команды, это зависит от того, как обрабатывается служба. Когда я запускал серверы Java Minecraft, вы могли использовать RCON для отправки команд на консоль, но были и другие уловки, такие как привязка к сокету.
Я не могу поручиться за безопасность этого кода, но быстрый поиск в Google показал, что кто-то создал правильные оболочки сокетов для такого рода функций: https://github.com/TapeWerm/MCscripts
Другой вариант - запустить Minecraft в сеансе экрана, что позволит вам повторно подключиться к работающей консоли по желанию.