Posted at

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なりのメリットも有るようなので、どっちも使えるようにしておくと良さそう