🤔

【AWS】Javaアプリをデーモン化してPCの電源を落としてもアプリが稼働し続けるようにしよう!!

2022/09/24に公開

仕様
Spring Boot (2.6) (gradleを使用)
Java JDK
linux2(AWS EC2)

以下サイトを参照しました。
https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html#deployment.installing

1 Spring Bootアプリのgradle.buildファイルに以下の文を追加。

tasks.named('bootJar') {
    launchScript()
}

2 エディターやコンソールでjarファイルを作成する。

3 Linux2(AWS) で クローンする。
 *公式サイトには、/verにmyappフォルダを作ったところにjarファイルを置いている。

4 linuxの/etc/systemd/systemに サービス名.serviceファイルを作る。作ったら以下コードを入力する。

[Unit]
Description=サービス名
After=syslog.target

[Service]
User=ユーザー名
ExecStart= jarファイルがあるディレクトリ (例:/var/myapp/myapp.jar)
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

5 systemctlに先ほど作ったserviceファイルが起動できるようにする

systemctl enable サービス名.service

6 serviceファイルを起動させる(先ほど記述したjarファイルを起動する)。

systemctl start サービス名.service

もし、すでに起動していたら、下記コードで再読み込みをする。

systemctl daemon-reload

7 しっかり機能しているか確認する

systemctl status サービス名.service

ここで現在の状況が表示される。

8 完了!

トラブルシューティング
systemctl statusでもしfailedと表記されていたら、問題点を探してみてください。

parmission deniedとなっていたらパーミッション(権限)のエラーです。
フォルダや.jarファイルのパーミッション(権限設定)に問題がある可能性があります。

ll ディレクトリ
または 
ls -l ディレクトリ

でパーミッションの状態をみてください。
もし問題があった場合はchmod コマンドで変更を行ってみてください。

Discussion