こんにちは。フリューのジョンです。
さてさて、以前の記事でSpring Bootアプリケーションのserviceでの起動について触れました。
しかし、上記はCentOS6での話でした。CentOS7になるとより柔軟なサービスの管理ができます。
さて、何が変わるのでしょうか?
serviceとsystemctlの違い
私が感じている良い点としては以下です
- systemctl statusでサービスの状態がわかる(いつ起動したのかなどもわかります)
- 後述する、ユニットファイルの設定によって起動の依存を記述することができる(あるサービスが起動していなければ動かさないなど
- 起動時、停止時に呼ばれるスクリプトを指定することができる
実際に複雑なマイクロサービスを作っていく上では欲しい機能になるかと思います。
変更方法
主に前回のものとの比較になりますが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エンジニアを募集しています!!