VoltDBをCentOS7.4で自動起動させる設定（シングル構成）

# はじめに

VoltDBをCentOS7.4で自動起動するように設定します。

前提条件は以下のとおりです。

・VoltDBのバージョンは8.3.1を使用。
・VoltDBはvoltdbユーザで起動する。
・VoltDBのインストールディレクトリは「/opt/voltdb」で、所有者はvoltdbユーザ。

VoltDBのインストール手順は以下を参照してください。

・[インメモリデータベース　VoltDBの最新バージョン（v8.3.1）をクラスタ構成でインストールし、簡単なプロシージャを実行する](https://qiita.com/mkyz08/items/1a1f8c9ce7f91293a5b1)


# 起動スクリプトを作成する

voltdbユーザで起動スクリプト「/opt/voltdb/voltstart.sh」を作成します。

```bash
#!/bin/bash

HOST_SERVER=volt1 # ホストサーバを指定します。
SERVER_NUM=1 # クラスタを構成するサーバ数を指定します。
VOLTDB_HOME=/opt/voltdb # VoltDBのインストールディレクトリを指定します。

source /etc/profile
cd ${VOLTDB_HOME}

voltdb start -D ${VOLTDB_HOME} -H ${HOST_SERVER} -c ${SERVER_NUM}
```

作成した起動スクリプトに実行権限を付与します。

```bash
# chmod 755 /opt/voltdb/voltstart.sh
```

次に、rootユーザでUnit定義ファイルを作成します。

・/etc/systemd/system/voltdb.service

```
[Unit]
Description=VoltDB
Requires=network.target remote-fs.target rc-local.service
After=network.target remote-fs.target rc-local.service

[Service]
Type=simple
User=voltdb
Group=voltdb
ExecStart=/opt/voltdb/voltstart.sh
ExecStop=/opt/voltdb/bin/voltadmin shutdown

[Install]
WantedBy=multi-user.target
```
※シングル構成の場合です。クラスタ構成の場合はvoltadmin stopを使用します。
※Type=simpleにしましたが、VoltDBはPIDファイルを生成するのでType=forkingでも良いと思います。

以下のコマンドでサービスに登録し、起動させます。

```bash
# systemctl enable voltdb
```

OSをリブートし、VoltDBが自動起動していることを確認します。

```bash
# ps -ef | grep voltdb
voltdb    1100     1  0 00:18 ?        00:00:00 /bin/bash /opt/voltdb/voltstart.sh
voltdb    1173  1100 10 00:18 ?        00:00:06 /usr/bin/java -Xmx2048m -server -Djava.awt.headless=true -Djavax.security.auth.useSubjectCredsOnly=false -Dsun.net.inetaddr.ttl=300 -Dsun.net.inetaddr.negative.ttl=3600 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseTLAB -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCondCardMark -Dsun.rmi.dgc.server.gcInterval=9223372036854775807 -Dsun.rmi.dgc.client.gcInterval=9223372036854775807 -XX:CMSWaitDuration=120000 -XX:CMSMaxAbortablePrecleanTime=120000 -XX:+ExplicitGCInvokesConcurrent -XX:+CMSScavengeBeforeRemark -XX:+CMSClassUnloadingEnabled -Dlog4j.configuration=file:///opt/voltdb-community-8.3.1/voltdb/log4j.xml -Djava.library.path=default -classpath /opt/voltdb-community-8.3.1/voltdb/voltdb-8.3.1.jar:/opt/voltdb-community-8.3.1/lib/vmetrics.jar:/opt/voltdb-community-8.3.1/lib/commons-logging-1.1.3.jar:/opt/voltdb-community-8.3.1/lib/log4j-1.2.16.jar:/opt/voltdb-community-8.3.1/lib/jetty-io-9.3.21.v20170918.jar:/opt/voltdb-community-8.3.1/lib/avro-1.7.7.jar:/opt/voltdb-community-8.3.1/lib/lz4-1.2.0.jar:/opt/voltdb-community-8.3.1/lib/jetty-server-9.3.21.v20170918.jar:/opt/voltdb-community-8.3.1/lib/jline-2.10.jar:/opt/voltdb-community-8.3.1/lib/tomcat-juli.jar:/opt/voltdb-community-8.3.1/lib/jsch-0.1.51.jar:/opt/voltdb-community-8.3.1/lib/slf4j-nop-1.6.2.jar:/opt/voltdb-community-8.3.1/lib/kafka-clients-0.8.2.2.jar:/opt/voltdb-community-8.3.1/lib/httpcore-4.3.3.jar:/opt/voltdb-community-8.3.1/lib/super-csv-2.1.0.jar:/opt/voltdb-community-8.3.1/lib/felix.jar:/opt/voltdb-community-8.3.1/lib/commons-codec-1.6.jar:/opt/voltdb-community-8.3.1/lib/scala-xml_2.11-1.0.2.jar:/opt/voltdb-community-8.3.1/lib/jetty-util-9.3.21.v20170918.jar:/opt/voltdb-community-8.3.1/lib/slf4j-api-1.6.2.jar:/opt/voltdb-community-8.3.1/lib/jetty-servlet-9.3.21.v20170918.jar:/opt/voltdb-community-8.3.1/lib/snappy-java-1.1.1.7.jar:/opt/voltdb-community-8.3.1/lib/jackson-mapper-asl-1.9.13.jar:/opt/voltdb-community-8.3.1/lib/kafka_2.11-0.8.2.2.jar:/opt/voltdb-community-8.3.1/lib/jetty-security-9.3.21.v20170918.jar:/opt/voltdb-community-8.3.1/lib/scala-library-2.11.5.jar:/opt/voltd-community-8.3.1/lib/owner-1.0.9.jar:/opt/voltdb-community-8.3.1/lib/owner-java8-1.0.9.jar:/opt/voltdb-community-8.3.1/lib/snmp4j-2.5.2.jar:/opt/voltd-community-8.3.1/lib/jetty-continuation-9.3.21.v20170918.jar:/opt/voltdb-community-8.3.1/lib/httpclient-4.3.6.jar:/opt/voltdb-community-8.3.1/lib/servlet-api-3.1.jar:/opt/voltdb-community-8.3.1/lib/jna.jar:/opt/voltdb-community-8.3.1/lib/jetty-http-9.3.21.v20170918.jar:/opt/voltdb-community-8.3.1/lib/metrics-core-2.2.0.jar:/opt/voltdb-community-8.3.1/lib/tomcat-jdbc.jar:/opt/voltdb-community-8.3.1/lib/httpasyncclient-4.0.2.jar:/opt/voltdb-community-8.3.1/lib/httpcore-nio-4.3.2.jar:/opt/voltdb-community-8.3.1/lib/protobuf-java-3.4.0.jar:/opt/voltdb-community-8.3.1/lib/scala-parser-combinators_2.11-1.0.2.jar:/opt/voltdb-community-8.3.1/lib/jackson-core-asl-1.9.13.jar:/opt/voltdb-community-8.3.1/lib/commons-lang3-3.0.jar:/opt/voltdb-community-8.3.1/lib/extension/voltdb-rabbitmq.jar org.voltdb.VoltDB probe placementgroup 0 voltdbroot /opt/voltdb mesh volt1 hostcount 1
```