バージョン
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
セッションをアタッチする(シェルからBDSのコンソールに移動する)にはscreen -r bds
セッションをデタッチする(BDSのコンソールからシェルに移動する)にはCtrl+a d
以下、screenコマンドの使い方など
マニュアル通りだと不便
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を実行したままシェルに戻れないので、メモリの使用率を見たり、バックアップを取ることができません。
ということで改良です。いったんBDSは終了させておきましょう。
stop
screenで起動
screen
コマンドを使って新しいセッションでBDSを起動すると便利です。
Ubuntu(シェル)とBDSのコンソールを行ったり来たりできる上に、SSHを切断しても終了しません。
新しいセッションでBDSを起動する
$ LD_LIBRARY_PATH=. screen -S bds ./bedrock_server
「-S <セッション名>」でセッションに名前を付けることができます(上の例では「bds」というセッション名を指定)。
アタッチする際などに名前でセッションを指定できるので便利。
起動を確認したらCtrl+a d
でセッションをデタッチすれば元のシェルに戻ってきます。
(デタッチしても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を付けることでスクロールバックバッファも出力します。
おまけ:起動スクリプト・再起動スクリプト
起動スクリプト
#!/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
再起動スクリプト
#!/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 ./command.sh
のように実行することで変数(この場合HOGE
)を渡せるんですね。知りませんでした。
#!/bin/bash
echo ${HOGE} # hello