起動スクリプト
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.target
かgraphical.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