Tomcat8.5をインストールしjsvcでサービス起動 for CentOS7.2

##はじめに 
CentOS7で提供されるrpmのTomcatは、systemdになったこともあり、通常のstartup.shやshutdown.shがコールされた起動スクリプトになっているようです。
Tomcatには、tomca-nativeというサービス化して起動するjsvcモジュールが提供されていますので、Apache Tomcatが提供する純正のTomcatバイナリとjsvcモジュールをコンパイルして、jsvc経由で起動する方法をメモしておきます。
個人的な見解ですが、jsvcを利用した方法のほうがTomcatを起動すると、Tomcatが高負荷になり、OutOfMemoryなどの障害が発生した場合に、プロセスがお化けになりにくいように思います。（通常のJavaプロセスで起動して、高負荷トラブルが発生すると、javaプロセスがお化けになる経験を決行しました）
2016年9月現在、JDKは、JDK8-101,Tomcatは、8.5.5が最新版です。
今回も上記のバージョンで作業を行います。

## 実践環境バージョン情報
| ソフトウェア | バージョン |
|:-:|:-:|
|  JDK | 1.8.0_101  |
|  Tomcat | 8.5.5  |
|  OS | CentOS 7.2  |

##JavaSDKを用意する
こちらは、ライセンスの同意の関係でWGETでダウンロードするのは難しいです。
あらかじめ管理端末でダウンロードしたものを転送するか、サーバーのブラウザーでダウンロードを行ってください。

###JavaSDKのダウンロード
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Accept License Agreementをクリックした後、「Linux x64」のJDKをダウンロードします。
![image](https://qiita-image-store.s3.amazonaws.com/0/85495/23285ed7-320c-5b75-2b92-d57127499cfa.png)


###解凍し、配置する

```bash:
tar xvzf jdk-8u101-linux-x64.tar.gz
cp -rf jdk1.8.0_101 /usr/local
```

###環境変数を設定する

```bash:
vi ~/.bashrc
```

一番下に以下を記載します

```bash:
export JAVA_HOME=/usr/local/jdk1.8.0_101
export PATH=$JAVA_HOME/bin:$PATH
```

環境変数を反映します

```bash:
source ~/.bashrc
```

正しくJavaコマンドが導入バージョンになっているかを確認する

```bash:
java -version
```

以下が結果で出てくればOK

```text:
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
```

##Tomcatを配置する

###ダウンロードし配置する

```bash:
cd /usr/local/src
wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-8/v8.5.5/bin/apache-tomcat-8.5.5.tar.gz
tar xvzf apache-tomcat-8.5.5.tar.gz
cp -rf apache-tomcat-8.5.5 /usr/local
```

###ユーザーを追加しオーナーを変更

```bash:
useradd tomcat
chown tomcat:tomcat -R /usr/local/apache-tomcat-8.5.5
```

###daemon-nativeをコンパイルし配置する

```bash:
mkdir -p /usr/local/src/daemon-native
cd /usr/local/apache-tomcat-8.5.5/bin
cp commons-daemon-native.tar.gz /usr/local/src/daemon-native
cd /usr/local/src/daemon-native

#解凍
tar xvzf commons-daemon-native.tar.gz
cd commons-daemon-1.0.15-native-src
cd unix

#コンパイル
#
#64BIT OSの場合以下の環境変数を設定する
export CFLAGS=-m64
export LDFLAGS=-m64

#Configure
./configure --with-java=$JAVA_HOME
make

#ファイルをコピー
cp jsvc /usr/local/apache-tomcat-8.5.5/bin

```

##起動スクリプトを配置する

```bash:
vi /usr/lib/systemd/system/tomcat.service
```

以下を張り付けます

```bash:
[Unit]
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking
PIDFile=/var/run/tomcat.pid
Environment=CATALINA_PID=/var/run/tomcat.pid
Environment=JAVA_HOME=/usr/local/jdk1.8.0_101
Environment=CATALINA_HOME=/usr/local/apache-tomcat-8.5.5
Environment=CATALINA_BASE=/usr/local/apache-tomcat-8.5.5
Environment="CATALINA_OPTS=-server -Xms2048m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=2048M"

ExecStart=/usr/local/apache-tomcat-8.5.5/bin/jsvc \
            -Dcatalina.home=${CATALINA_HOME} \
            -Dcatalina.base=${CATALINA_BASE} \
            -cp ${CATALINA_HOME}/bin/commons-daemon.jar:${CATALINA_HOME}/bin/bootstrap.jar:${CATALINA_HOME}/bin/tomcat-juli.jar \
            -user tomcat \
            -java-home ${JAVA_HOME} \
            -pidfile /var/run/tomcat.pid \
            -errfile SYSLOG \
            -outfile SYSLOG \
            $CATALINA_OPTS \
            org.apache.catalina.startup.Bootstrap

ExecStop=/usr/local/apache-tomcat-8.5.5/bin/jsvc \
            -pidfile /var/run/tomcat.pid \
            -stop \
            org.apache.catalina.startup.Bootstrap

[Install]
WantedBy=multi-user.target
```

###Tomcatの起動と自動起動の設定

Tomcatサービス自動起動設定

```bash:
systemctl enable tomcat
```

```bash:
systemctl start tomcat
```

##参考
- https://panovski.me/install-tomcat-8-on-centos-7/
- http://moznion.hatenadiary.com/entry/2016/03/11/121343