start.sh ファイルを持つ Minecraft サーバーの起動サービスを作成するにはどうすればよいですか?

start.sh ファイルを持つ Minecraft サーバーの起動サービスを作成するにはどうすればよいですか?

Ubuntu Server に改造された FTB サーバーをインストールし、「ftb」というユーザーとグループを作成し、サーバー ファイルを含むフォルダーを含む独自のディレクトリを作成しました。サーバー フォルダーには、サーバーを起動するための start.sh ファイルがあります。 、、など/opt/ftb/のコマンドを使用できるように、システム サービス ファイルを作成するにはどうすればよいですか。サーバーを停止するときに、サーバーを保存してから閉じるようにします。.service ファイルはどのようになりますか。に配置する必要があることはわかっていますが、ftb ユーザーが独自の仮想端末などを開いて世界を保存してからサーバーを停止できるようにするファイルの書き方がわかりません。systemctl status ftbacademy.servicesystemctl start ftbacademy.servicesystemctl stop ftbacademy.service/etc/systemd/system/

Ubuntu サーバー バージョン 20.04.3

FTB アカデミー 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そのコマンドを含む 1 行を編集して削除することで、「コマンド」を削除できます。

関連情報