LoginSignup
7
12

More than 3 years have passed since last update.

java -jar をsystemdに登録する(systemctlで制御可能にする)

Last updated at Posted at 2020-05-03

起動スクリプト

start.bash
#!/bin/bash
cd jar配置パス # へ移動
java -jar server.jar
pid=$!
touch $pid.pid # PIDファイルを作成する

停止スクリプト

stop.bash
#!/bin/bash
cd jar配置パス # へ移動
pidFile=`ls *.pid`
pid=${pidFile%.*}  # {pid}.pidファイルからpidを取得
echo $pid stop server 
kill $pid # kill
rm -rf $pidFile # pidファイル削除

envファイル

printenv > /etc/system/env

実行するユーザで雑に。

Unitファイル

vi /usr/lib/systemd/system/サービス名.service

Unitファイルの内容
document

[Unit]
# サービスの説明文です。内容は自由です。
Description = server process

[Service]
User = root
EnvironmentFile = /etc/systemd/env
ExecStart = /?/start.sh
ExecStop = /?/stop.sh
Restart = on-abort
Type = forking # 上のsh構成なら、onceでも良さそう。

[Install]
WantedBy = multi-user.target

WantedBy

サービスを起動するターゲットを指定します。ターゲットは、従来のランレベル概念の代替と見なすことができます。詳細は「systemd ターゲットでの作業」を参照してください。

普通の用途では、multi-user.targetgraphical.target

  • poweroff.target
  • rescue.target
  • multi-user.target
  • graphical.target
  • reboot.target

コマンドメモ

反映

systemctl daemon-reload

OS起動時、自動起動

systemctl enable サービス名.service

起動

systemctl start サービス名.service

停止

systemctl stop サービス名.service

ログ

上記のsh構成だと、標準出力に何も出ないかも。
独自にロギングしていればそっちで管理するパターンもあるかと。

journalctl -f | grep サービス名

追記

さらに簡単に

CPUAccounting=yes により、cpu time

[Unit]
Description = 説明
[Service]
CPUAccounting=yes
User = ユーザー
Group = グループ
EnvironmentFile = /etc/systemd/env
WorkingDirectory= 実行ディレクトリ
ExecStart= java -jar ****.jar
Restart = on-abort
Type = simple
[Install]
WantedBy = multi-user.target

7
12
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
7
12