サービス化すると自動起動等も簡単に設定できるので便利です。
- 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には、起動スクリプトを付加するFully Executable Jarの作成が可能です。
Fully Executable Jarを使用した場合は下記のようにサービスファイルの
ExecStartにjarを記載するだけで実行可能になります。
また、サービスファイルを更新した場合は 下記コマンドを実行してWorkingDirectory=/var/myapp ExecStart=/var/myapp/myapp.jar SuccessExitStatus=143 TimeoutStopSec=10 Restart=on-failure
systemdを再読み込みする必要があります。systemctl daemon-reload
man systemd.service 日本語訳
systemd で Spring Boot アプリケーションのプロセス管理をする