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

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

しかし、上記はCentOS6での話でした。CentOS7になるとより柔軟なサービスの管理ができます。
さて、何が変わるのでしょうか?

serviceとsystemctlの違い

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

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

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

変更方法

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

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

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

CentOS7では、プロセス名.service というユニットファイルを /usr/lib/systemd/system に配置します。
中身は以下のようになります。(中身の詳細は 9.6. システムのユニットファイルの作成および変更 を参照ください)

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

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

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

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

補足

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

まとめ

systemctlコマンドによる起動で再起動スクリプトを自作する必要もありません(serviceによる起動でも同じですが
マイクロサービスを進めていくには、インフラ回りについてきちんと勉強していく必要があると感じます。

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

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

詳しくはこちら

追記:

Spring Boot 2系でのリリースについて若干変更がありましたのでページを作りました。
Spring Boot 2系でServiceによる起動をさせてみる