はじめに
SpringBootアプリは「java -jar」コマンドで実行できますが、ログアウトするとアプリが停止します。
起動し続けるためにはサービスとして起動させる必要があります。
今回はSpringBootアプリケーションをService(デーモン)として起動する手順を記載します。
※デーモンとは常駐プログラムのUNIX系OSにおける呼び名です。
環境
OS:CentOS7
手順
- Fully Executable Jarの作成
- confファイルの作成
- Service(デーモン)の登録
- Service(デーモン)の自動起動設定
1. Fully Executable Jarの作成
SpringBootアプリを常駐させるために通常のjarファイルは起動スクリプトを書く必要があるが、
Fully Executable Jarは起動スクリプトが組み込まれています。
作成方法は、pom.xmlに次のようなのタグを追加します。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
2. confファイルの作成
起動するjarファイルと同名で拡張子を.conf
に変えたファイルを作成します。
.confファイルに環境変数の定義、javaオプション、jarの実行時引数を記載します。
環境変数はexport
、JavaオプションはJAVA_OPTS
、jarの実行時引数はRUN_ARGS
で定義します。
export LANG="ja_JP.UTF8"
JAVA_OPTS="-Xms1024M -Xmx1024M"
RUN_ARGS="--spring.profiles.active=production"
3. Service(デーモン)の登録
Service(デーモン)の登録は/etc/systemd/system/
にserviceファイルを作成します。
任意のファイル名でオッケーです。
[Unit]
Description = サービスの説明
[Service]
ExecStart = /opt/bin/hoge.jar // 起動jarのファイルパス
Restart = always
Type = simple
User = root
Group = root
SuccessExitStatus = 143
[Install]
WantedBy = multi-user.target
Service(デーモン)を再読み込みします。
$ sudo systemctl daemon-reload
Service(デーモン)を起動します。
$ sudo systemctl start hoge
起動を確認します。
「Active: active (running)」になっていればオッケーです。
$ sudo systemctl status hoge
hoge.service - hoge
Loaded: loaded (/etc/systemd/system/hoge.service; disabled)
Active: active (running) since Mi 2021-08-18 15:20:57 CEST; 4min 18s ago
Service(デーモン)を停止する場合は次のコマンドを実行します。
$ sudo systemctl stop hoge
4. Service(デーモン)の自動起動設定
サーバー起動時にService(デーモン)を自動起動したい場合は以下の設定をします。
自動起動を有効にする場合は次のコマンドを実行します。
$ sudo systemctl enable hoge.service
自動起動設定を確認します。
$ sudo systemctl list-unit-files -t service
自動起動を無効にする場合は次のコマンドを実行します。
$ sudo systemctl disable hoge.service