【Minecraft】サーバーを自動起動する

Minecraftサーバーをsystemdを使用して、自動再起動を行う方法を紹介します。

【非推奨】screenをインストールする

screenは非推奨パッケージとなりました

代わりにtmux等を使用してください。導入済の方は、次の章へ進んでください。

screenは、仮想端末(別ウィンドウ)を作成できるソフトウェアです。

今回は、screenを用いたスクリプトを作成するため、インストールしていきます。

Ubuntuの場合

コマンド
apt-get install screen

CentOSの場合

コマンド
yum install screen

起動用スクリプトを作成

本記事はtmuxを使用します

2022-08-25以降、screenからtmuxを使用する形式に修正しました。

スクリプトを作成する

/opt/minecraft/server/に、下記内容のstart.shを作成します。

メモリ使用量の変更

-Xms8G -Xmx8G の部分を変更することでメモリの使用量を変更できます。

下記は8GBになっています。

start.sh
#!/bin/bash

#ウィンドウの名前
SCREEN_NAME='minecraft'

tmux new -s $SCREEN_NAME -d 'java -server -Dfile.encoding=UTF-8 -Xms8G -Xmx8G -jar /opt/minecraft/server/server.jar'
実行権限を付与する

作成したスクリプトに実行権限を必ず付与してください。

コマンド
chmod +x start.sh

Minecraftサーバーのコンソール表示

起動用スクリプトで起動した、Minecraftサーバーのコンソールを表示する場合は、下記コマンドを実行します。

コマンド
tmux a -t minecraft

コンソールを閉じる場合は、下記のキー操作をします。

キー操作
Ctrl + b を押下後に d

停止用スクリプトを作成

スクリプトを作成する

/opt/minecraft/server/に、下記内容のstop.shを作成します。

サーバー内アナウンス後に停止

下記スクリプトは、「30秒後にサーバーを停止します」とアナウンス後、30秒待機してから停止します。

stop.sh
#!/bin/bash

# ウィンドウの名前
SCREEN_NAME='minecraft'

if [ -n "$(tmux list-sessions | grep -o "${SCREEN_NAME}")" ]; then
    # 停止開始
    echo [`date '+%F %T'`] 'server stop script start'
    # サーバー内にアナウンス
    tmux send-keys -t $SCREEN_NAME "say 30秒後にサーバーを停止します" ENTER
    sleep 30s
    # セーブコマンド発行
    tmux send-keys -t $SCREEN_NAME "save-all" ENTER
    sleep 5s
    # 停止コマンド発行
    tmux send-keys -t $SCREEN_NAME "stop" ENTER
    #停止実行待機
    sleep 30s
else
    echo [`date '+%F %T'`]  'server is not runnning'
fi
実行権限を付与する

作成したスクリプトに実行権限を必ず付与してください。

コマンド
chmod +x stop.sh

自動制御用ファイル作成

最後に、作成したスクリプトを自動で実行されるように、制御用のファイルを作成します。

rootユーザーで作業してください

制御用ファイル作成

/etc/systemd/system/に、下記内容のminecraft.serviceを作成します。

minecraft.service
[Unit]
Description=Minecraft Server Service
After=network.target

[Service]
Type=forking
# minecraft専用ユーザーがいる場合、書き換える
User=root
# Userと同様、専用グループがある場合は、書き換える
Group=root
# 上記スクリプトを配置した場所
WorkingDirectory=/opt/minecraft/server/
# 起動用スクリプトの場所
ExecStart=/opt/minecraft/server/start.sh
# 停止用スクリプトの場所
ExecStop=/opt/minecraft/server/stop.sh
Restart=always

[Install]
WantedBy=multi-user.target
サービスを再読み込みする
コマンド
systemctl daemon-reload
自動制御を有効化
コマンド
systemctl enable minecraft

下記メッセージが出たら、自動起動が有効化成功

Created symlink /etc/systemd/system/multi-user.target.wants/minecraft.service → /etc/systemd/system/minecraft.service.
状態確認
コマンド
systemctl status minecraft

下記のように、Loaded: loadedになっていれば成功です。
また、念のためサーバーを再起動して、動作しているか確認してください。

● minecraft.service - Minecraft Server Service
Loaded: loaded (/etc/systemd/system/minecraft.service; enabled; vendor preset: enabled)
Active: inactive (dead)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください