普段は自動起動の設定をする時はchkconfigで設定しているんだけど、
systemdの方で設定してほしいという依頼があったので、対応した時の作業メモ
今回対応したのはWebSphereの自動起動
環境ファイル(EnvironmentFile)の作成
systemdではユーザの環境設定を読まないらしく、
必要に応じてpathを通してやる必要がある
EnvironmentFileに設定したけど、Environmentで個別設定でも可
$ cd /etc/sysconfig
$ sudo vi was_config
JAVA_HOME=/usr/local/java8 # javaのパス
PATH=xxxx # 必要に応じて
Unitファイルの作成
systemdではUnitファイルと呼ばれるファイルを作成して、
サービスを登録する仕組みなっているみたい
$ cd /etc/systemd/system/
$ sudo vi 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なりのメリットも有るようなので、どっちも使えるようにしておくと良さそう