redhat
systemd
WebSphere

systemdでの自動起動設定

More than 1 year has passed since last update.

普段は自動起動の設定をする時はchkconfigで設定しているんだけど、
systemdの方で設定してほしいという依頼があったので、対応した時の作業メモ
今回対応したのはWebSphereの自動起動

環境ファイル(EnvironmentFile)の作成

systemdではユーザの環境設定を読まないらしく、
必要に応じてpathを通してやる必要がある
EnvironmentFileに設定したけど、Environmentで個別設定でも可

$ cd /etc/sysconfig
$ sudo vi was_config
was_config
JAVA_HOME=/usr/local/java8 # javaのパス
PATH=xxxx # 必要に応じて

Unitファイルの作成

systemdではUnitファイルと呼ばれるファイルを作成して、
サービスを登録する仕組みなっているみたい

$ cd /etc/systemd/system/
$ sudo vi was.service
was.service
[Unit]
Description=was daemon

[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/sysconfig/was_config
ExecStart=/usr/local/WebSphere/was start
ExecStop=/usr/local/WebSphere/was stop

[Install]
WantedBy=multi-user.target

デーモンプロセスじゃなくてよかったので、Type=oneshotに設定
RemainAfterExit=yesを設定することで、コマンド実行完了後に起動完了として認識してくれるようになる
Type=simpleにしちゃうとコマンド実行時点で起動完了と認識されちゃうのでこっちで設定
WASは起動遅いから困る

実行確認

起動に成功していれば、Active: activeになっているし、
失敗していればActive: failed

# 登録の確認(表示されればOK)
$ sudo systemctl list-unit-files --type=service | grep was
was.service                                  disabled
# 起動と停止の確認
$ sudo systemctl start was
$ sudo systemctl status was
● was.service - was daemon
   Loaded: loaded (/etc/systemd/system/was.service; disabled; vendor preset: disabled)
   Active: active (exited) since 日付
  Process: xxxx ExecStart=/usr/local/WebSphere/was start (code=exited, status=0/SUCCESS)
 Main PID: xxxx (code=exited, status=0/SUCCESS)
$ sudo systemctl stop was

エラーログは以下の方法で確認できるので、必要に応じてチェック
journalctlは他にも色々オプションが有るようなので、less使わなくてもいいかもしれないけど、
個人的にlessが気に入ってるのでこの方法で

$ sudo journalctl -b | less

自動起動の登録

一通り問題なければ、自動起動を設定してサーバの再起動を試して終わり

$ sudo systemctl enable was
$ sudo systemctl list-unit-files --type=service | grep was
was.service                                  enabled
$ sudo systemctl start was
$ sudo shutdown -r now

感想

環境設定ファイルを用意したり、 Unitファイル作ったりなどちょっとやること多くて手間取った
ログ自体も最初は原因がなかなかわかりにくく、個人的にはchkconfigでよくね?って思うことが多々あった
ただ、systemdにはsystemdなりのメリットも有るようなので、どっちも使えるようにしておくと良さそう