プライベートMinecraft Bedrockサーバーとして使用するために、Ubuntu 18.04インスタンスをセットアップしました。
サーバー自体を https://www.minecraft.net/en-us/download/server/bedrock/ からダウンロードしました
シェルから直接実行でき、すべて正常に動作します。ただし、私がやりたいのは、サービスとして構成することです。そのため、起動時に自動的に開始し、正常に停止します。
「bedrock_server」実行可能ファイルはフォアグラウンドで実行され、「stop」、「kick」、「save」など、標準入力からのさまざまなコマンドを待ちます。
そのように制御できるようにサービススクリプトを設定する方法はありますか...
$ service minecraft stop
$ service minecraft restart
私のような他のMinecraft固有のコマンドも発行できればさらに良いでしょう...
$ service minecraft kick [player name or xuid]
等.
私はこの機能についてあまり心配していません。私が欲しい主なことは、サーバーの起動時に適切に起動し、適切に停止できることです。
完全に書いておく必要はありません。誰かが私をチュートリアル、またはテンプレートなどに導くことができれば、それは素晴らしいことです。
これは、シェルから起動するために現在使用している完全なコマンドです...
$ cd /home/[my-user]/bedrock-server-1.14.60.5 && LD_LIBRARY_PATH=. ./bedrock_server
更新...
以下の答えと多くの試行錯誤に基づいて、このsystemdスクリプトを思いつきました...
[Unit]
Description=Minecraft Bedrock Service
After=network-online.target
[Service]
User=[my-user]
WorkingDirectory=/home/[my-user]/bedrock-server-1.14.60.5
Type=forking
ExecStart=/usr/bin/screen -dmS UbuntuMinecraft /bin/bash -c "LD_LIBRARY_PATH=. ./bedrock_server"
ExecStop=/usr/bin/screen -Rd UbuntuMinecraft -X stuff "say Stopping server in 10 seconds...\r"
ExecStop=/bin/sleep 10
ExecStop=/usr/bin/screen -Rd UbuntuMinecraft -X stuff "stop\r"
GuessMainPID=no
TimeoutStartSec=600
[Install]
WantedBy=multi-user.target
これはかなりうまくいくようです。
サーバーで他のコマンドを実行する必要がある場合は、次のようにscreenセッションに接続できます...
$ screen -R UbuntuMinecraft
次に、必要なネイティブコマンドを実行できます。
私のソリューションは部分的にこのコードに基づいています... https://github.com/TheRemote/MinecraftBedrockServer
初期化スクリプトは、使用しているディストリビューションのバージョンによって異なりますが、Ubuntuの最新バージョンのほとんどはsystemdを使用していると思います。だからあなたがおそらく欲しいもの Systemdファイル 。
Systemdファイルは、主に正しい値に置き換える必要がある標準形式に従います。
私はこれをテストしていませんが、標準の構文に従って、これらの行に沿って何かが欲しいでしょう:
[Unit]
Description=Minecraft Service
After=network.target
[Service]
Type=Simple
WorkingDirectory=/home/user/bedrock-server-1.14.60.5
ExecStart=/bin/sh -c "LD_LIBRARY_PATH=. ./bedrock_server"
Restart=on-failure
[Install]
WantedBy=multi-user.target
TimeoutStopSec
のように ここで設定できるさまざまなもの があります。これにより、「stop」コマンドを実行してプロセスを強制終了する前にサービスをシャットダウンする時間を設定できます。
ディストリビューションの適切なフォルダー(/ etc/systemd/system)にファイルをドロップすると、systemctlまたはserviceコマンドを使用してサービスを制御できます。
「minecraft」という名前のサービスを作成した場合、次のようなコマンドを使用できます。
systemctl status minecraft
-現在のステータスを取得systemctl starts minecraft
-サービスを開始しますsystemctl stop minecraft
-サービスを停止しますsystemctl enable minecraft
-起動時にこのサービスを開始します
コンソールコマンドを実行できるかどうかは、サービスの処理方法によって異なります。私がJava Minecraftサーバーを実行していたときに、コンソールにコマンドを送信するために「RCON」を使用することができましたが、ソケットへのバインドなどの他のトリックがありました。
私はこのコードの安全性を保証できませんが、簡単なGoogleは、誰かがこの種の機能のために正しいソケットラッパーをここに作成したことを暗示しています: https://github.com/TapeWerm/MCscripts
別のオプションは、スクリーンセッションでMinecraftを起動することです。これにより、実行中のコンソールに自由に再接続できます。