start.sh 파일이 있는 Minecraft 서버용 시작 서비스를 어떻게 만드나요?

start.sh 파일이 있는 Minecraft 서버용 시작 서비스를 어떻게 만드나요?

저는 Ubuntu 서버에 수정된 FTB 서버를 설치하고 "ftb"라는 사용자 및 그룹을 생성한 다음 /opt/ftb/서버 파일이 있는 폴더가 포함된 자체 디렉터리를 제공했습니다. 서버 폴더에는 서버를 시작하기 위한 start.sh 파일이 있습니다. systemctl status ftbacademy.service, systemctl start ftbacademy.service, 등 의 명령을 사용할 수 있도록 시스템 서비스 파일을 만드는 방법은 무엇입니까 systemctl stop ftbacademy.service? 서버를 중지하면 저장한 다음 서버를 닫고 싶습니다. .service 파일은 어떤 모양입니까? 나는 그것이 에 배치되어야 한다는 것을 알고 있지만 /etc/systemd/system/ftb 사용자가 자신의 가상 터미널을 열거나 세상을 구하고 서버를 중지할 수 있는 파일을 작성하는 방법을 모릅니다.

우분투 서버 버전 20.04.3

FTB Academy 1.16 서버 파일 다운로드 사이트 사용:https://feed-the-beast.com/modpacks/88/server/2077Linux 다운로드 옵션을 선택한 다음 설치 파일을 실행하여 서버 파일을 자동으로 다운로드했습니다.

또한 다른 버전의 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

스크립트에서 EULA의 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 || echo "${MC_CMD}" >> ~/.bashrc

PATH위에 추가한 명령을 실행하는 것은 약간의 편의를 제공하므로 서버를 시작할 때마다 스크립트를 추가하거나 상대 경로를 계산하거나 전체 경로를 입력해야 하는 것에 대해 걱정할 필요가 없습니다 .

서버를 삭제하기로 결정한 경우 ~/.bash_aliases해당 명령이 포함된 단일 행을 편집하고 제거하여 "명령"을 제거할 수 있습니다.

관련 정보