Help us understand the problem. What is going on with this article?

CentOS7 + Systemd でMinecraftサーバーの起動/自動起動/自動再起動

More than 3 years have passed since last update.

はじめに

Minecraftサーバーって急に落ちたりしますよね!?
そのたびにSSHで入って起動し直すのはだるい!

デーモン化はどうしてますか?
Screen??

もっといい方法がありますよ! :innocent:

簡単にMinecraftサーバーをいい感じに運用できるようにする方法を紹介します。

Systemdとは?

今回Systemdというものを使ってMinecraftサーバーを起動するようにします。
Systemdは簡単にいうとLinuxを起動するための仕組みです。
デーモン化や急に落ちた時の自動再起動、OS立ち上げた時の自動起動、ログ記録なんでもよろしくやってくれます。

CentOS 7から使えるようになっています。

Minecraftサーバーの構築

CentOS 7でのMinecraftサーバーの構築はこちらの記事を参考にしてください。

minecraftユーザのホームディレクトリ以下にjarファイルがあり、minecraftユーザでサーバーを起動するという前提で説明します。

[minecraft@mctest ~]$ id
uid=1000(minecraft) gid=1000(minecraft) groups=1000(minecraft)
[minecraft@mctest ~]$ tree .
.
└── minecraft
    ├── minecraft_server.1.8.8.jar
    └── minecraft_server.jar

1 directory, 2 files

起動スクリプト作成

/home/minecraft/minecraft/bootに起動用のスクリプトを作成します。
minecraftユーザーで作業してください。

vi ~/minecraft/boot

スクリプトの中身は次のようになります。たった1行です!
ヒープメモリのサイズを環境変数で指定できるようになっています。

~/minecraft/boot
#!/bin/bash

java -Xms$XMS_SIZE -Xmx$XMX_SIZE -jar $HOME/minecraft/minecraft_server.jar nogui

最後にこのスクリプトに実行権限を与えます。

chmod +x ~/minecraft/boot

環境変数定義ファイル作成

ではヒープメモリサイズの環境変数を定義するファイルを/home/minecraft/minecraft/environmentsに作成します。
こちらもminecraftユーザーで作業してください。

vi ~/minecraft/environments

中身はこんな感じ。わかりやすいですね!

~/minecraft/environments
# ヒープメモリの初期サイズ
XMS_SIZE=1024M

# ヒープメモリの最大サイズ
XMX_SIZE=1024M

以降はここを書き換えるとメモリサイズを調整することができます。

unitファイル作成

最後にSystemdのUnitファイルというものを作成します。
これはrootユーザーで作業してください。

vi /etc/systemd/system/minecraft_server.service

中身はこんな感じになります。
詳しくは説明しませんが単純なのでなんとな〜くわかっていただけるかと思います。
Restart=alwaysが落ちたら自動で再起動するオプションです。

/etc/systemd/system/minecraft_server.service
[Unit]
Description=Minecraft Server
After=network-online.target

[Service]
ExecStart=/bin/bash /home/minecraft/minecraft/boot
EnvironmentFile=/home/minecraft/minecraft/environments
WorkingDirectory=/home/minecraft/minecraft
Restart=always
User=minecraft
Group=minecraft

[Install]
WantedBy=multi-user.target

ファイルを作成したら、Systemdからこのファイルを読み込みます。

systemctl daemon-reload

OSが起動した時にMinecraftサーバーも起動するように自動起動を有効にしておきます。

systemctl enable minecraft_server

起動

いよいよ起動します!
systemdを使った起動は次のコマンドでできます。

systemctl start minecraft_server

次でステータスがみれます。

systemctl status minecraft_server

こんな感じ:

# systemctl status minecraft_server
minecraft_server.service - Minecraft Server
   Loaded: loaded (/etc/systemd/system/minecraft_server.service; enabled)
   Active: active (running) since 日 2015-09-13 15:24:38 JST; 1min 57s ago
 Main PID: 1813 (bash)
   CGroup: /system.slice/minecraft_server.service
           ├─1813 /bin/bash /home/minecraft/minecraft/boot
           └─1814 java -Xms1024M -Xmx1024M -jar /home/minecraft/minecraft/minecraft_server.jar nogui

 9月 13 15:24:43 mctest.cs429idcfcloud.internal bash[1813]: [15:24:43] [Server thread/INFO]: Starting minecraft server version 1.8.8
 9月 13 15:24:43 mctest.cs429idcfcloud.internal bash[1813]: [15:24:43] [Server thread/INFO]: Loading properties
 9月 13 15:24:43 mctest.cs429idcfcloud.internal bash[1813]: [15:24:43] [Server thread/INFO]: Default game type: SURVIVAL
 9月 13 15:24:43 mctest.cs429idcfcloud.internal bash[1813]: [15:24:43] [Server thread/INFO]: Generating keypair
 9月 13 15:24:43 mctest.cs429idcfcloud.internal bash[1813]: [15:24:43] [Server thread/INFO]: Starting Minecraft server on *:25565
 9月 13 15:24:43 mctest.cs429idcfcloud.internal bash[1813]: [15:24:43] [Server thread/INFO]: Using epoll channel type
 9月 13 15:24:43 mctest.cs429idcfcloud.internal bash[1813]: [15:24:43] [Server thread/INFO]: Preparing level "world"
 9月 13 15:24:44 mctest.cs429idcfcloud.internal bash[1813]: [15:24:44] [Server thread/INFO]: Preparing start region for level 0
 9月 13 15:24:45 mctest.cs429idcfcloud.internal bash[1813]: [15:24:45] [Server thread/INFO]: Preparing spawn area: 54%

終了するときは次のコマンドです。

systemctl stop minecraft_server

おわりに

以上です!快適なMinecraftライフを!:bomb:

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away