![start.sh ファイルを持つ Minecraft サーバーの起動サービスを作成するにはどうすればよいですか?](https://rvso.com/image/1071725/start.sh%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%8C%81%E3%81%A4%20Minecraft%20%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E8%B5%B7%E5%8B%95%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
Ubuntu Server に改造された FTB サーバーをインストールし、「ftb」というユーザーとグループを作成し、サーバー ファイルを含むフォルダーを含む独自のディレクトリを作成しました。サーバー フォルダーには、サーバーを起動するための start.sh ファイルがあります。 、、など/opt/ftb/
のコマンドを使用できるように、システム サービス ファイルを作成するにはどうすればよいですか。サーバーを停止するときに、サーバーを保存してから閉じるようにします。.service ファイルはどのようになりますか。に配置する必要があることはわかっていますが、ftb ユーザーが独自の仮想端末などを開いて世界を保存してからサーバーを停止できるようにするファイルの書き方がわかりません。systemctl status ftbacademy.service
systemctl start ftbacademy.service
systemctl 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 行を編集して削除することで、「コマンド」を削除できます。