![Как создать службу автозагрузки для сервера Minecraft, у которого есть файл start.sh?](https://rvso.com/image/1071725/%D0%9A%D0%B0%D0%BA%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C%20%D1%81%D0%BB%D1%83%D0%B6%D0%B1%D1%83%20%D0%B0%D0%B2%D1%82%D0%BE%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8%20%D0%B4%D0%BB%D1%8F%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%20Minecraft%2C%20%D1%83%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D0%BE%D0%B3%D0%BE%20%D0%B5%D1%81%D1%82%D1%8C%20%D1%84%D0%B0%D0%B9%D0%BB%20start.sh%3F.png)
Я установил модифицированный сервер FTB на свой сервер Ubuntu, создал пользователя и группу под названием «ftb» и выделил ему собственный каталог, /opt/ftb/
содержащий папку с файлами сервера. В папке сервера есть файл start.sh для запуска сервера. Как мне создать файл системной службы, чтобы я мог использовать такие команды, как systemctl status ftbacademy.service
, systemctl start ftbacademy.service
, и systemctl stop ftbacademy.service
. После остановки сервера я хочу, чтобы он сохранял и затем закрывал сервер. Как будет выглядеть файл .service? Я знаю, что его нужно поместить в /etc/systemd/system/
, но я не знаю, как написать файл, который заставит пользователя ftb открыть свой собственный виртуальный терминал или что-то еще, чтобы иметь возможность спасти мир, а затем остановить сервер.
Ubuntu Server версии 20.04.3
Используемый сайт для загрузки файлов сервера FTB Academy 1.16:https://feed-the-beast.com/modpacks/88/server/2077Я выбрал вариант загрузки Linux, а затем запустил установочный файл для автоматической загрузки файлов сервера.
Я также использую другую версию JDK для запуска файла сервера, поэтому я изменил файл start.sh следующим образом:
#!/bin/bash
if ! grep -q "eula=true" eula.txt; then
echo "Do you agree to the Mojang EULA available at https://account.mojang.com/documents/minecraft_eula ?"
read -N 1 -p "[y/n] " EULA
if [ "$EULA" = "y" ]; then
echo "eula=true" > eula.txt
echo
fi
fi
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -javaagent:log4jfix/Log4jPatcher-1.0.0.jar -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -Xmx5000M -Xms4000M -jar forge-1.16.5-36.2.2.jar nogui
решение1
Я создал файл с именем [email protected]
по адресу /etc/systemd/system/
. Файл содержит следующее:
[Unit]
Description=FTB Server: %i
After=network.target
[Service]
WorkingDirectory=/opt/ftb/%i
User=ftb
Group=ftb
Restart=always
ExecStart=/usr/bin/screen -DmS mc-%i bash start.sh
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 15 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 5 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "save-all"\015'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "stop"\015'
[Install]
WantedBy=multi-user.target
Затем я использовал systemctl enable ftb@academy
и systemctl start ftb@academy
для включения и запуска сервера. Я также понял, что когда я изначально создал пользователя ftb и дал ему право владения папкой, я не дал ему разрешения на подпапки, поэтому ему было отказано в разрешении на запуск сервера.
решение2
Обратите внимание на URL для EULA в скрипте. Все, что он делает, это спрашивает, прочитали ли вы его условия, и принимаете ли вы их, но только если вас еще не спрашивали и не ответили «да».
Поэтому после первого запуска будут выполняться только верхние и нижние строки.
Самый простой способ настройки (который сэкономит время в долгосрочной перспективе) — добавить псевдоним для команды в последней строке, которая фактически настраивает и запускает файл сервера. Это можно сделать с помощью:
MC_CMD='alias start_srvr="/usr/lib/jvm/java-11-openjdk-amd64/bin/java -javaagent:log4jfix/Log4jPatcher-1.0.0.jar -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -Xmx5000M -Xms4000M -jar forge-1.16.5-36.2.2.jar nogui"' && echo "${MC_CMD}" >> ~/.bash_aliases || echo "${MC_CMD}" >> ~/.bashrc
Выполнение команды, которую я добавил выше, — это просто небольшое удобство, поэтому вам не нужно беспокоиться о добавлении скрипта или PATH
необходимости вычислять относительный путь или вводить полный путь каждый раз, когда вы хотите запустить свой сервер.
Если вы когда-нибудь решите удалить сервер, вы можете удалить «команду», отредактировав ~/.bash_aliases
и удалив единственную строку, которая ее содержит.