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

Minecraft

Minecraftサーバーを運用していて、再起動するたびに起動コマンドを実行するのがめんどくさいと思ったことはありませんか?

「systemd」を使用すればそれが解決できます!。
ということで、さっそくやってみましょう!。

screenをインストールする

「screen」を入れていない場合は、まずインストールしましょう。

「screen」は、仮想端末(別ウィンドウ)を簡単に作成することができるため、サーバー実行中でも別の作業を行うことができるため、入れておくと便利です!。

Ubuntuの場合

apt-get install screen

CentOSの場合

yum install screen

細かい設定もできますので、時間があったらやってみるといいかもしれません。

詳しい使い方は今回説明しません。

起動用スクリプトを作成

サーバーを起動するスクリプトを作成します。

スクリプトはサーバーファイルと同じところに配置します。
今回は「/opt/minecraft/server/」に配置します。
ファイル名は「start.sh」とします。

#!/bin/sh

#screenの名前
SCREEN_NAME='minecraft'

screen -UAmdS $SCREEN_NAME java -server -Dfile.encoding=UTF-8 -Xms8G -Xmx8G -jar /opt/minecraft/server/server.jar

必ず「chmod +x start.sh」を実行し、実行権限を与えておきましょう。

停止用スクリプトを作成

サーバーを停止するスクリプトを作成します。

起動用スクリプトと同じところに配置します。
ファイル名は「stop.sh」とします。

#!/bin/sh

# screenの名前
SCREEN_NAME='minecraft'

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

急にサーバー停止すると、参加者の方もびっくりしてしまいます。

そのため、サーバー内へアナウンスしたのちに停止させます。

また、起動用スクリプト同様、実行権限を与えるのを忘れずに!

Unitファイルを作成

自動起動させるためのファイルを作成します。

作成先は「/usr/lib/systemd/system/」です。
ファイル名は「minecraft.service」とします。

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

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

[Install]
WantedBy=multi-user.target

上記ファイルを作成したら、次のコマンドを実行します。

[root@xxx.xxx.xxx.xxx]# systemctl daemon-reload      # サービスを再読み込みする
[root@xxx.xxx.xxx.xxx]# systemctl enable minecraft   # 自動起動を有効化
# 下のメッセージが出たら、自動起動が有効化されたということ
Created symlink /etc/systemd/system/multi-user.target.wants/minecraft.service → /usr/lib/systemd/system/minecraft.service.

[root@xxx.xxx.xxx.xxx]# systemctl status minecraft   # 状態確認
● minecraft.service - Minecraft Server Service
    Loaded: loaded (/usr/lib/systemd/system/minecraft.service; enabled; vendor preset: enabled)
    Active: inactive (dead)

「Loaded: loaded」になっていれば準備OK!。

一度サーバーを再起動して、問題なければ完了です!。

ちなみに、下記コマンドで起動用スクリプトを実行できます。

systemctl start minecraft

正常に起動すれば、状態確認コマンド実行したときに
「Active: inactive (dead)」から「Active: active (running)」になっているはずです。

停止用スクリプトを実行する場合は下記コマンドを実行します。

systemctl stop minecraft

まとめ

特別、難しいスクリプトを組むことなく、「systemd」を使って簡単に自動起動できるようになりました。

Minecraft以外にも「systemd」を使える場面はあると思いますので、覚えておくと良いかもしれませんね。

コメント

タイトルとURLをコピーしました