LoginSignup
47
52

More than 5 years have passed since last update.

SpringBootで作ったjarをinit.dのサービスとして動かしてみた

Posted at

概要

SpringBoot1.3からFully Executable Jarとしてビルドして
Linux上のサービスとして簡単に登録できるようになった。

今までは起動シェルを作成し、サービスに登録していたのだけれど
これらをすっきりさせることができそう。

設定手順

gradle準備

build.gradleに以下の記述を追加

springBoot {
  executable = true
}

ビルド

いつものgradle buildで事足りる

$ gradle build

配置

profileとか実行環境に関わる設定はconfファイルを作成して設定できる。
confファイルはデフォルトで実行するjar実体と同じ場所にある「jarと同じ名前.conf」を見に行くようになっている。

実はvim等で作成したjarを見ると頭の方に起動スクリプトが自動生成されている。この中身を見るとどのconfを呼んでいるか等がわかるので一読。

今回はdeployというフォルダにjarとconfを配置すると仮定する。

$ mkdir deploy

$ cp -p /xxxx/build/libs/spring-boot.jar /xxxx/deploy/spring-boot.jar

[jarの名前].conf という名前でjarと同じ場所に配置する
このとき、confファイルはjarのシンボリック名やシンボリックリンクと同じ位置ではいけない。
実体のjar名、位置に配置する

$ vi spring-boot.conf

.......

export JAVA_HOME=/usr/local/jdk1.8
export JAVA_OPTS="-Dspring.profiles.active=production"
export LANG="ja_JP.utf8"
  • JAVA_HOME-> service起動する際にJAVA_HOMEが見つかるように指定しておく
  • JAVA_OPTS-> ここにprofileやxmxなどを設定することができる
  • LANG->メッセージリソースをLANG指定で切り替えている場合とか。service起動時LANGは引き継がれないので。

メモ
JAVA_OPTSでなく環境変数にprofileを設定した場合、logbackが正しく受け取ってくれなかった。
profileはJAVA_OPTSで渡すのがよさそう。

ファイルパーミッションを調整しておく

$ chmod u+x spring-boot.jar
$ chmod o+r spring-boot.conf

メモ
サービスの起動・停止はrootユーザで実行する。
jar自体はjarファイルの所有ユーザで実行される。
confファイルはrootユーザが参照できるようにしておく必要がある

サービスに登録

/etc/init.d にシンボリックリンクするだけでOK

$ sudo ln -s /xxxx/deploy/spring-boot.jar /etc/init.d/spring-boot

起動・終了


# サービスの起動
$ sudo service spring-boot start

# サービスの停止
$ sudo service spring-boot stop

# サービスの自動起動ON
$ sudo chkconfig spring-boot on

実行ログなど

標準出力はデフォルトで/var/log/[サービス名].logに出力される
別フォルダや別ファイルに出力するにはconfに以下のような設定をする

SpringBootから出力するlogback経由のログ等は通常どおりjarファイル起点の指定した位置に出力される。

export LOG_FOLDER=/xxxxxx/deploy

参考サイト

参考1

47
52
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
52