Рейтинг:2

Как создать службу запуска для сервера Minecraft с файлом start.sh?

флаг eg

Я установил модифицированный сервер FTB на свой сервер Ubuntu, создал пользователя и группу с именем «ftb» и дал ему собственный каталог. /опт/ftb/ который содержит папку с файлами сервера. В папке сервера есть файл start.sh для запуска сервера. Как мне создать файл системной службы, чтобы я мог использовать такие команды, как статус systemctl ftbacademy.service, systemctl запустить ftbacademy.service, и systemctl остановить ftbacademy.service. После остановки сервера я хочу, чтобы он сохранился, а затем закрыл сервер. Как будет выглядеть файл .service? Я знаю, что это должно быть помещено в /etc/системд/система/, но я не знаю, как написать файл, который заставит пользователя ftb открыть свой собственный виртуальный терминал или что-то еще, чтобы иметь возможность спасти мир, а затем остановить сервер.

Версия сервера Ubuntu 20.04.3

Используемый сайт загрузки файлов сервера FTB Academy 1.16: https://feed-the-beast.com/modpacks/88/server/2077 Я выбрал вариант загрузки Linux, а затем запустил установочный файл, чтобы автоматически загрузить файлы сервера.

Я также использую другую версию JDK для запуска файла сервера, поэтому я изменил файл start.sh на это:

#!/бин/баш
если ! grep -q "eula=true" eula.txt; тогда
    echo "Вы согласны с лицензионным соглашением Mojang, доступным по адресу https://account.mojang.com/documents/minecraft_eula?"
    читать -N 1 -p "[д/н] " ЛСКП
    если [ "$EULA" = "y" ]; тогда
        эхо "eula=true" > eula.txt
        эхо
    фи
фи
/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 ногуи
Nate T avatar
флаг it
какой модифицированный ftb сервер? Это пришло с официального сайта feedthebeast или откуда-то еще. Укажите конечную точку, и я установлю ее локально и дам вам знать. Нужно увидеть файл sh, прежде чем я расскажу вам, как его добавить. Вероятно, его можно вызвать в `.bashrc`, но мне нужно точно знать, что он делает, прежде чем давать совет по установке. Кроме того, я хочу копию сервера. XD Кстати, вам нужно добавить свою версию Ubuntu к вопросу. Различные версии содержат разные среды. Большинство ответов будут отличаться, по крайней мере, немного в зависимости от версии. Тем более, что мы только что изменили Win MGR по умолчанию в 21.04.
lordoftimelords avatar
флаг eg
@NateT Кажется, я добавил всю запрошенную вами информацию. Я использовал официальный сайт FTB и добавил ссылку в пост.
lordoftimelords avatar
флаг eg
@NateT `cd /usr/lib/jvm/java-11-openjdk-amd64/bin && ls -a | grep java` выводит `java Ява javac javadoc javap`.Как это поможет при создании файла .service? У меня нет проблем с запуском сервера, я просто хочу создать файл .service, чтобы запускать его при запуске, останавливать сервер и проверять статус с помощью пользователя ftb. Простите меня, если я неправильно понимаю, что происходит. Я не слишком знаком с этим. В основном я следую очень конкретным руководствам и копирую и вставляю материал.
Terrance avatar
флаг id
Отвечает ли это на ваш вопрос? [Как запустить одну команду при запуске с помощью systemd?](https://askubuntu.com/questions/919054/how-do-i-run-a-single-command-at-startup-using-systemd)
Nate T avatar
флаг it
Кроме того, я вижу слово `log4j, которое меня немного пугает. За ним следует «исправить», но я бы не стал ставить на это свою ферму. Если вы планируете разместить его на сервере Docker или apache2 с переадресацией портов, я бы этого не сделал. См. [здесь.] (https://www.youtube.com/watch?v=qjA_vc9Ua5A&t=203s). Это буквально видео о том, как сервер Minecraft на Ubuntu внедряется с полезными нагрузками, содержащими cmd для запуска в системе жертвы. Я бы предложил проверить новости и попытаться оценить доверие сообщества открытого исходного кода к патчу. Очевидно, с тех пор, как я последний раз проверял, появилось больше уязвимостей.
Nate T avatar
флаг it
ОК, ЕСЛИ ВЫ НЕ ПЛАНИРУЕТЕ ПЕРЕНОС В ИНТЕРНЕТ, запустите этот cmd в оболочке bash. `MC_CMD='псевдоним 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 || эхо "${MC_CMD}" >> ~/.bashrc`
lordoftimelords avatar
флаг eg
@NateT Что, если я планирую перенести вперед? Я планирую использовать сервер вдали от дома с друзьями. Я использую принудительное использование белого списка и перенаправляю только требуемый порт. Пользователь ftb также не имеет разрешений sudo. Кроме того, как бы я остановил сервер, если бы мне когда-нибудь пришлось? Я не совсем понимаю, что делает эта команда выше. Я думаю, я понимаю, что он добавляет псевдоним, чтобы сократить команду до start_srvr, но что делает `&& echo "${MC_CMD}" >> ~/.bash_aliases || echo "${MC_CMD}" >> ~/.bashrc` делать?
Nate T avatar
флаг it
`судо чмод 774 ` даст вам необходимое разрешение, но запустите `ls -l ` и сначала запишите старую строку разрешений на случай, если вам понадобится вернуться.Кроме того, зачем вам использовать systemd для запуска сценария запуска? Вы хотите работать как демон? В этом не было бы смысла, если только вы не используете его в качестве выделенного веб-сервера, и в этом случае не имеет значения...
Nate T avatar
флаг it
Я бы подождал пару недель... **Посмотрите видео** ^^^. В нем ОГРОМНАЯ уязвимость. Достаточно большой, чтобы он вполне мог стать последним гвоздем в гроб Java. И это исходит от профессионального разработчика Java. Я не говорю это легкомысленно.
lordoftimelords avatar
флаг eg
@NateT Я добавил комментарий к вашему ответу ниже со ссылкой на руководство, которому я следовал для ванильных серверов. Я действительно не знаю преимуществ и недостатков systemd, и я не знаю, что такое демон. Мне просто нравится функциональность, позволяющая запускать сервер, проверять состояние и останавливать сервер с помощью команд, и мне не нужно держать активное окно sshed на сервере, чтобы делать эти вещи. И еще, а можно ссылку на это видео? Означает ли это, что я должен закрыть другие свои серверы? Я для них использую spigot и использую TCPShield для предотвращения ddos ​​и прочего, если не ошибаюсь.
Nate T avatar
флаг it
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/132813/discussion-between-nate-t-and-lordoftimelords).
Terrance avatar
флаг id
Тогда вы можете также увидеть https://askubuntu.com/questions/676007/how-do-i-make-my-systemd-service-run-via-specific-user-and-start-on-boot при добавлении `User=` и `Group=` для работы от имени другого пользователя в systemd.
Рейтинг:2
флаг eg

Я создал файл с именем фтб@.сервис на месте /etc/системд/система/. Файл содержит следующее:

[Ед. изм]
Описание=FTB-сервер: %i
После=network.target

[Оказание услуг]
Рабочий каталог=/opt/ftb/%i

Пользователь=ftb
Группа=фтб

Перезапустить = всегда

ExecStart=/usr/bin/screen -DmS mc-%i bash start.sh

ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "скажем, СЕРВЕР ВЫКЛЮЧАЕТСЯ ЧЕРЕЗ 15 СЕКУНД..."\015'
ExecStop=/bin/сон 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "скажем, СЕРВЕР ВЫКЛЮЧАЕТСЯ ЧЕРЕЗ 10 СЕКУНД..."\015'
ExecStop=/bin/сон 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "скажем, СЕРВЕР ВЫКЛЮЧАЕТСЯ ЧЕРЕЗ 5 СЕКУНД..."\015'
ExecStop=/bin/сон 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'материал "сохранить все"\015'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'вещь "стоп"\015'

[Установить]
WantedBy=многопользовательская.цель

Затем я использовал systemctl включить ftb@academy и systemctl запустить ftb@academy для включения и запуска сервера. Я также понял, что когда я изначально создал пользователя ftb и передал ему право собственности на папку, я не дал ему разрешения на вложенные папки, поэтому ему было отказано в разрешении на запуск сервера.

Рейтинг:0
флаг it

Обратите внимание на URL-адрес лицензионного соглашения в сценарии. Все, что он делает, это просит вас прочитать и принять его условия, но только если вас еще не спрашивали и вы не ответили «да».

Таким образом, после первого запуска он будет выполнять только верхнюю и нижнюю строки.

Самый простой способ настроить его (который сэкономит время в долгосрочной перспективе) — добавить псевдоним для команды в последней строке, которая фактически настраивает и запускает файл сервера. Это можно сделать с помощью:

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 || эхо "${MC_CMD}" >> ~/.bashrc

Выполнение команды, которую я добавил выше, — это просто небольшое удобство, поэтому вам не нужно беспокоиться о добавлении скрипта в ДОРОЖКА или же вам придется либо вычислять относительный путь, либо вводить полный путь каждый раз, когда вы хотите запустить свой сервер.

Если вы когда-нибудь решите удалить сервер, вы можете удалить «команду», отредактировав ~/.bash_aliases и удалить единственную строку, содержащую его.

lordoftimelords avatar
флаг eg
Как бы я остановил сервер, используя этот метод? Возможно, я не совсем понимаю, что происходит, но я считаю, что это просто запускает сервер при загрузке, но больше ничего не правильно? Для других моих серверов я следовал этому руководству https://linuxconfig.org/ubuntu-20-04-minecraft-server-setup, и мне понравилась возможность остановить сервер и автоматически передать сообщение сервера, в котором говорится, что сервер отключается. . Я знаю, что это придирчиво, но я бы предпочел что-то подобное. Является ли это возможным? У меня нет знаний, чтобы воссоздать это для сервера ftb. Я попробовал и запутался.
Nate T avatar
флаг it
Как это сказано в ридми? Я могу написать функцию для регистрации. Фактически, с помощью log4j я могу убить его отсюда! XD Нет, а если серьезно, файл, упомянутый в самом конце псевдонима, является точкой входа. У него должна быть встроенная «внутриигровая» команда администратора для выполнения обоих этих действий (регистрация и остановка сервера).
lordoftimelords avatar
флаг eg
Обычно, если вы запускаете команду start.sh от имени пользователя в терминале во время использования sshed, сервер активно запускается в терминале.Затем вы можете вводить команды на сервер (почти как / команды в игре, если у вас есть права владельца или администратора), например, стоп. Таким образом, он показывает загрузку сервера, вы можете ввести стоп, чтобы сохранить и остановить, использовать такие команды, как белый список, черный список, ipban и т. д. Мне не нужны другие команды, так как я могу редактировать файлы, содержащие пользователей из белого списка, но остановить было бы неплохо, чтобы мне не приходилось заходить в Minecraft, присоединяться к серверу, а затем приказывать ему остановиться. Требуется время для загрузки.
Nate T avatar
флаг it
Я понимаю. Я что-нибудь напишу. дай мне секунду.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.