MinecraftServerをサービスとして起動する(Ubuntu14.04)

# マイクラ楽しい
けど、ぼくはすぐ飽きます。
そんなことはどうでもいいのですが、ちょっとサーバー建ててマルチで遊んでみたくなったので手順のメモ。自分用の為、不親切仕様です。適宜ググりながら読んでください。

# screenとか使わないでやるメリット
解説サイトなどを見るとScreenというコマンドを使用してバックグラウンドでの起動を実現させるのが一般的なようですが、何らかの原因でサーバーが落ちた際には手動で立ち上げ直したりしなければならないっぽく（私はScreenを使用した方法でやったことがないのでよく分からない）、あんまりスマートではないですが、下記で説明するUpstartを使用することで自動的に再起動・起動時に自動でサーバー立ち上げを実現することができます。

# 使用環境
今回使用した環境は以下の通りです。サーバーには[ConoHa](https://www.conoha.jp)を使用しています。

* Ubuntu Server 14.04
* minecraft_server.1.10.jar
    * 2016/06/17現在の最新バージョン
* Java version1.7.0
    * `java -version`で確認可能。
    * 入っていない場合は`apt-get install default-jre`で入れられる。

# 手順
## 実行用ユーザーを作る
今回は、minecraftという名前で実行用のユーザーを作成し、そのユーザーでサーバーを実行することにします。
ユーザー作成はsudoを実行できるユーザーかrootで入って

```console
$ sudo adduser minecraft
```
とします。（先頭の$は入力不要・rootユーザーの場合は先頭のsudoは不要）
パスワードを聞かれるので適当に入力・再入力。FullNameとか聞かれますが入力せずEnterで進んで最後にyでおわり。
間違えてuseraddにするとホームディレクトリが作られなくてつらくなる。
## サーバーの本体をダウンロード
Minecraftのサイトからサーバー本体をダウンロードします。
Minecraftトップページから[Download](https://minecraft.net/ja/download/)に飛ぶとこのような画面になる。
![2016-06-17.png](https://qiita-image-store.s3.amazonaws.com/0/20371/31e9ca28-2115-a12a-f297-23c2aef85d19.png)
「PLAY WITH YOUR FRIEND」から「set up your own Minecraft server」を選択。
![2016-06-17 (1).png](https://qiita-image-store.s3.amazonaws.com/0/20371/18fde1a0-0a20-e567-f59b-6bb71b1cceae.png)
すると、この画面に飛ぶのでminecraft_server.x.x.jarのリンクアドレスをコピーする。
そうしたら、Ubuntuに戻って

```console
$ sudo wget -O /home/minecraft/minecraft_server.jar (先ほどのリンクアドレスを貼り付け) /home/minecraft
```
とするとサーバー本体がminecraftユーザーのホームディレクトリにダウンロードされる。

### 過去のバージョンのサーバーが欲しいとき
配布ワールドとかをやりたいとかで過去のバージョンのサーバーが必要な時はリンクのバージョンを書き換えると落とせる。例えば、`https://s3.amazonaws.com/Minecraft.Download/versions/1.10/minecraft_server.1.10.jar`を`https://s3.amazonaws.com/Minecraft.Download/versions/1.9.4/minecraft_server.1.9.4.jar`とすることで1.9.4が落とせた。（ファイル名とディレクトリの名前、2箇所を変更することに注意。）

## サーバー起動用のスクリプトを書く
vimなどテキストエディタで起動用スクリプトを作成します。名前は何でもいいけど今回は`run.sh`としました。

```sh
\#!/bin/bash
java -Xmx512M -Xms512M -jar minecraft_server.jar nogui
```
`-Xmx512M -Xms512M`で割り当てるメモリの量を指定できます。今回サーバーに1GBしかメモリが積まれていないので512Mにしていますが、本当は1024が推奨されてたので余裕のある人はそうするといいと思われる。
（512Mに指定していると起動するときに警告が出るのが精神衛生上良くない。）

## 起動用スクリプトに実行権限を与える

```console
$ chmod +x run.sh
```
これだけ。

## 一度実行する
一回手動で実行しておきます。ターミナルにて`./run.sh`とすると、いろんな表示が出た後にサーバーが自動的に停止するはずです。
そうしたら、出力されたeula.txtの最終行のfalseをtrueに変更して保存しておきます。

## .confファイルを作成する
ここが今回の要で、xxx.confというファイルを/etc/initに作成することでシステム起動の際に勝手に起動させたり、死んだときに再起動してくれたりということを実現できます。
今回は/etc/initの下にminecraft_server.confを作成。（/etc下なのでroot権限がないと書き込めません。）

```none
description "Minecraft Server"

start on runlevel[2345]
stop on runlevel[016]

chdir /home/minecraft/
exec `su minecraft -c "/bin/bash /home/minecraft/server/run.sh"`
respawn
```
こんな感じ。見れば分かるかもしれないですが、chdirは作業ディレクトリ、execは実行されるコマンドを表しています。今回はminecraftユーザーで実行したかったので`su minecraft...`という感じにしてあります。

## Upstartに設定反映させる
設定を反映させるには以下のコマンドを実行します。

```console
$ sudo initctl reload-configuration
```
設定が正常にできているか確認するには

```console
$ sudo initctl list | grep minecraft_server
```
とします。このときに何も表示されていなかったら.conf作成付近で間違えている可能性大ですので、見直してみてください。

## 起動する
最後に起動させて終了です。
起動するには

```console
$ sudo initctl start minecraft_server
```
とします。

### 停止・再起動方法
ちなみに止めるときは

```console
$ sudo initctl stop minecraft_server
```
です。簡単ですね。
stopのところをrestartにすると再起動できるのでサーバーの設定を変えたときなどに実行してください。

# CentOSの人向けの情報
試したわけではないのでアレですが、こちらの記事がわかりやすそうです。
[CentOS7 + Systemd でMinecraftサーバーの起動/自動起動/自動再起動](http://qiita.com/nownabe/items/ca45bb4829d75460b31e)
# 参考サイト
* [ubuntuでユーザーを追加する](http://qiita.com/shishamo_dev/items/79b971a4288ed8eea990)
* [root以外のユーザーでupstartを実行する](http://qiita.com/toshihirock/items/7c80c6a6f2e4b8687d60)
* [Upstart を使ってお手軽 daemon 化](http://heartbeats.jp/hbblog/2013/02/upstart-daemon.html)
 * Upstartの関連はここが一番わかりやすいです。