はじめに
マイクラマルチサーバーを建てる際にScreenを使っていたのですが、うっかりScreenのターミナルを閉じてしまったりとなにかと問題がありました。
Systemdとmcrconで快適にサービス化してしまいましょう。
諸要素
- CentOS 8 Stream
- MinecraftサーバのJAR (今回はバニラサーバーを使用)
- Systemd
- mcrcon
Minecraftの設定
server.properties(追記/変更)
rcon.port=25575
enable-rcon=true
rcon.password=あなたのRCONパスワード
mcrconのインストール
# 未導入であれば入れる
sudo dnf gcc make
# お好みの作業用ディレクトリ内で
wget https://github.com/Tiiffi/mcrcon/archive/refs/tags/v0.7.2.zip
unzip v0.7.2.zip
cd mcrcon-0.7.2
make
sudo make install
minecraft作業用ユーザーの.bashrc
に下記内容を追記しておくと幸せになれます。
.bashrc(追記)
export MCRCON_HOST=localhost
export MCRCON_PORT=25575
export MCRCON_PASS=あなたのRCONパスワード
起動/終了スクリプト、サービス定義ファイルの作成
サーバーのJARやスクリプトなどは/home/minecraft/mc_dir/
に設置されている想定です。
start.sh
# !/bin/sh
export HOME=/home/minecraft
export USER=minecraft
cd ~/mc_dir
java -Xmx1024M -Xms1024M -jar ./server.jar nogui
※割当メモリ量は環境に合わせて調整してください。
stop.sh
export USER=minecraft
export MCRCON_HOST=localhost
export MCRCON_PORT=25575
export MCRCON_PASS=あなたのRCONパスワード
echo stop | /usr/local/bin/mcrcon -t
※/usr/local/bin/mcrcon stop
とするとサーバーの終了を待たずにコマンドが終了するので不適当です。
minecraft.service
[Unit]
Description=Minecraft Multiplay Server Service
[Service]
Type=simple
User=minecraft
ExecStart=/home/minecraft/mc_dir/start.sh
ExecStop=/home/minecraft/mc_dir/stop.sh
TimeoutStopSec=120
PrivateTmp=true
Restart=always
[Install]
WantedBy=multi-user.target
※ タイムアウト時間はサーバー規模に合わせて調整してください。
サービス登録、起動/終了確認
cd /usr/lib/systemd/system/
ln -s /home/minecraft/mc_dir/minecraft.service
systemctl enable minecraft
systemctl start minecraft
journalctl -f -u minecraft
systemctl stop minecraft
最後に
楽しいマイクラ生活を!