Edited at

Minecraft Bedrock Dedicated Serverをscreenで立ち上げる


バージョン

Ubuntu Server 18.04 LTS

Minecraft Bedrock Dedicated Server 1.7.0.13 alpha

現在のBedrock Dedicated Server(BDS)はアルファ版なので、仕様が変わる可能性は大いにあります。


コマンド

マニュアル記載の起動コマンド↓

$ LD_LIBRARY_PATH=. ./bedrock_server

screenでBDSを起動する↓

$ LD_LIBRARY_PATH=. screen -S bds ./bedrock_server

デタッチした状態で起動する↓

$ LD_LIBRARY_PATH=. screen -dmS bds ./bedrock_server

セッションをアタッチする(Ubuntu→BDS)にはscreen -r bds

セッションをデタッチする(BDS→Ubuntu)にはCtrl+a d


マニュアル通りだと不便

SSHでUbuntuにログインしているような状態でマニュアル通り起動すると…

$ LD_LIBRARY_PATH=. ./bedrock_server

NO LOG FILE! - setting up server logging...
NO LOG FILE! - [2018-11-22 00:46:27 INFO] Starting Server
NO LOG FILE! - [2018-11-22 00:46:27 INFO] Version 1.7.0.13
NO LOG FILE! - [2018-11-22 00:46:27 INFO] Level Name: Bedrock level
NO LOG FILE! - [2018-11-22 00:46:27 INFO] Game mode: 0 Survival
NO LOG FILE! - [2018-11-22 00:46:27 INFO] Difficulty: 1 EASY
NO LOG FILE! - [2018-11-22 00:46:30 INFO] IPv4 supported, port: 19132
NO LOG FILE! - [2018-11-22 00:46:30 INFO] IPv6 supported, port: 19133
NO LOG FILE! - [2018-11-22 00:46:30 INFO] Server started.

この状態でSSHを切断するとBDSが落ちてしまいます。

また、BDSを実行したままUbuntuのコンソールに戻れないので、メモリの使用率を見たり、バックアップを取ることができません。

ということで改良です。いったんBDSは終了させておきましょう。

stop


screenで起動

screenコマンドを使って新しいセッションでBDSを起動すると便利です。

UbuntuとBDSのコンソールを行ったり来たりできる上に、SSHを切断しても終了しません。

新しいセッションでBDSを起動する

$ LD_LIBRARY_PATH=. screen -S bds ./bedrock_server

起動を確認したらCtrl+a dでセッションをデタッチすればUbuntuのコンソールに戻ってきます。

(デタッチしてもBDSは起動したままです)

[detached from 7039.bds]

$


便利なscreenコマンド

存在するセッションを確認したいときはscreen -ls

$ screen -ls

There is a screen on:
7039.bds (11/22/2018 01:01:01 AM) (Detached)
1 Socket in /run/screen/S-bds-user.


BDSのコンソールに戻りたい(セッションをアタッチしたい)ときはscreen -r <セッション名>

$ screen -r bds

...

NO LOG FILE! - [2018-11-22 01:02:28 INFO] IPv4 supported, port: 19132
NO LOG FILE! - [2018-11-22 01:02:28 INFO] IPv6 supported, port: 19133
NO LOG FILE! - [2018-11-22 01:02:29 INFO] Server started.

Ctrl+a dでセッションをデタッチします。


デタッチした状態でBDSにコマンド(stopなど)を送りたい場合はscreen -r <セッション名> -X stuff $"<コマンド>\n"

$ screen -r bds -X stuff $"stop\n"

ちなみにstopコマンドでBDSを終了させると、そのセッションも終了します。


デタッチした状態でBDSのコンソールに出力されている内容をファイルに保存するときはscreen -r <セッション名> -X hardcopy -h <ファイル名>

$ screen -r bds -X hardcopy -h /home/bds-user/bds.log

-hを付けることでスクロールバックバッファも出力します。


おまけ:起動スクリプト・再起動スクリプト

起動スクリプト


bds_start.sh

#!/bin/bash

# bedrock_serverのディレクトリ
SERVER_DIR=/home/bds-user/minecraft
# セッション名
SESSION_NAME='bds'

cd ${SERVER_DIR}
LD_LIBRARY_PATH=. screen -dmS ${SESSION_NAME} ./bedrock_server


再起動スクリプト


bds_restart.sh

#!/bin/bash

# 起動スクリプト
START_SCRIPT=/home/bds-user/bds_start.sh
# セッション名
SESSION_NAME='bds'

# BDSにstopコマンド送信
screen -r ${SESSION_NAME} -X stuff $"stop\n"

# セッションが終了するのを待ちます
while true
do
screen -r ${SESSION_NAME} -X select . > /dev/null || break
sleep
1
done

# バックアップするならここで
# cp -a / rsync -a

${START_SCRIPT}


余裕があればバックアップしましょう。

BDSには終了せずにバックアップを取るためのsave hold save query save resumeもあります。

実行前にパーミッションの設定もお忘れなく

$ chmod +x bds_start.sh

$ chmod +x bds_restart.sh

参考:Minecraftサーバをscreenとcronでプラグインを使わずに自動再起動する


蛇足

LD_LIBRARY_PATH=. ./bedrock_serverが何をしているのか分かりませんでしたが、

$ HOGE=hello ./hoge.sh

のように実行すると、スクリプトに変数が渡されるんですね。知りませんでした。


hoge.sh

#!/bin/bash

echo ${HOGE} # hello