CentOS7でのSpring Bootの起動について


目次

こんにちは。フリューのジョンです。

さてさて、以前以下の記事でSpring Bootアプリケーションのserviceでの起動について触れました。

Spring Boot アプリケーションの再起動時にハマったこと

しかし、上記はCentOS6での話でした。CentOS7になるとより柔軟なサービスの管理ができます。

さて、何が変わるのでしょうか?

serviceとsystemctlの違い

私が感じている良い点としては以下です

  1. systemctl statusでサービスの状態がわかる(いつ起動したのかなどもわかります)
  2. 後述する、ユニットファイルの設定によって起動の依存を記述することができる(あるサービスが起動していなければ動かさないなど
  3. 起動時、停止時に呼ばれるスクリプトを指定することができる

実際に複雑なマイクロサービスを作っていく上では欲しい機能になるかと思います。

変更方法

主に前回のものとの比較になりますが2点が異なるのみです。

サービスの登録方法がことなる

サービスの登録には以下のコマンドを実行していましたが

sudo ln -s ${application}.jar /etc/init.d/${好きなプロセス名}

CentOS7では、プロセス名.service というユニットファイルを /usr/lib/systemd/system に配置します。

中身は以下のようになります。(中身の詳細は 9.6. システムのユニットファイルの作成および変更 を参照ください)

[Unit]
Description = プロセス名

[Service]
User = 実行したいユーザ
ExecStart = /path/to/アプリケーション.jar
SuccessExitStatus=143
Type = simple

[Install]

プロセスの起動方法が異なる

サービスの実行には以下コマンドで実行していましたが、

service ${好きなプロセス名} restart

CentOS7では、systemctlコマンドを利用します。

sudo systemctl restart ${好きなプロセス名}

この2点だけです。それ以外のconfファイルの書き方、配置などは全く変わりません。

補足

デフォルトのユニットファイル設定では /var/log/messages にログが吐き出されます。

そのため、アプリケーションのログは別に出しているし、ここに吐き出されたくない場合はユニットファイルのServiceに以下を追加します。

StandardOutput=null
StandardError=null

まとめ

systemctlコマンドによる起動で再起動スクリプトを自作する必要もありません(serviceによる起動でも同じですが

マイクロサービスを進めていくには、インフラ回りについてきちんと勉強していく必要があると感じます。

それでは素敵なマイクロサービス運用、Spring Bootライフを!!

弊社では一緒にサービスを作ってくれるSpringエンジニアを募集しています!!

詳しくはこちら

追記:

Spring Boot 2系でのリリースについて若干変更がありましたのでページを作りました。

Spring Boot 2系でServiceによる起動をさせてみる