systemdでSpring Bootアプリケーションのサービス管理

Spring Bootアプリケーションですが、 公式サイトの 2. Spring Boot アプリケーションのインストール に記載されているように 簡単にsystemdのサービス化する事ができます。


サービス化すると自動起動等も簡単に設定できるので便利です。
STEP1
spring bootアプリケーションのサービスファイルの作成

/etc/systemd/system/以下にサービスファイル(myapp.service)を作成

※勿論、管理しやすいように/var/myapp以下にmyapp.service作成して/etc/systemd/system/にリンクを張っても構いません。

[Unit]
Description=myapp
After=syslog.target

[Service]
User=myapp
ExecStart=/usr/bin/java -Xmx1024m -jar /var/myapp/myapp.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target


公式の記載例の様に上記の記述で実行可能ですが、WorkingDirectoryやRestartの設定を追記した方が良いと思います。

[Unit]
Description=myapp
After=syslog.target

[Service]
User=myapp
WorkingDirectory=/var/myapp
ExecStart=/usr/bin/java -Xmx1024m -jar /var/myapp/myapp.jar
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure

[Install]
WantedBy=multi-user.target

STEP2
spring bootアプリケーションがsystemdに認識されているか確認



systemctl list-unit-files --type=service | grep myapp
myapp.service                     disabled

STEP3
spring bootアプリケーションの自動起動設定



systemctl enabled myapp

上記で、Spring Bootアプリケーションのサービス化は終了です。 サービスファイルで異常終了時は再起動する設定にしていますが、 更にmonit等を使用してポート監視しても良いかと思います。


補足
spring bootには、起動スクリプトを付加するFully Executable Jarの作成が可能です。 Fully Executable Jarを使用した場合は下記のようにサービスファイルの ExecStartにjarを記載するだけで実行可能になります。


WorkingDirectory=/var/myapp
ExecStart=/var/myapp/myapp.jar
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure

また、サービスファイルを更新した場合は 下記コマンドを実行して

systemctl daemon-reload

systemdを再読み込みする必要があります。
参考サイト
man systemd.service 日本語訳

systemd で Spring Boot アプリケーションのプロセス管理をする