systemdにやられる
お疲れ様です。伊藤です。
ブログの更新が遅れてしまい申し訳ございません。プライベートで色々とありまして・・・
と言い訳はこの辺にして今回はsystemdについてです。
全然自動化じゃねーじゃん、という方もいらっしゃるかと思いますが、今回自動化の仕組み作りをするにあたり、RHEL6とRHEL7の違いに悩まされておりますのでそのあたりで調べた内容をこちらに少しでも書いておきたいと、そういった趣旨になります。
というわけでsystemd
こちらはサービス起動デーモンです。簡単に言うとOSを起動するときに一緒に立ち上げるサービスを管理してて必要なサービスを自動で起動してくれるものです。今まではinitdというデーモンが担当していましたがRHEL7以降はsystemdに切り替わりました。
それによりコマンドも大きく様変わりし、RHEL6に慣れ親しんだ方はRHEL7に触ることで悲鳴を上げることになります(私がそう)
例えば今までサービス起動の設定を見る場合は
# chkconfig --list
だけでOKでした。これですべてのランレベルの起動サービスが一覧で表示されていたんです。
[root@RHEL6 ~]# chkconfig --list abrt-ccpp 0:off 1:off 2:off 3:on 4:off 5:on 6:off abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off autofs 0:off 1:off 2:off 3:on 4:on 5:on 6:off blk-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off ・ ・ ・
ところがRHEL7で同じコマンドを実行すると
[root@RHEL7 system]# chkconfig --list 注記: この出力は SysV サービスのみであり、ネイティブな systemd のサービスは含まれていません。 systemd services. SysV 設定のデータはネイティブな systemd の設定によって上書きされます。 systemd サービスを一覧表示するには 'systemctl list-unit-files' を使用してください。 特定のターゲットにおいて有効化されているサービスを確認するには、 'systemctl list-dependencies [target]' 。 netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off rhnsd 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@RHEL7 system]#
となります。これじゃ全部表示できないからsystemctl使ってね、と。では使ってみましょう。
[root@RHEL7 system]# systemctl list-unit-files UNIT FILE STATE proc-sys-fs-binfmt_misc.automount static dev-hugepages.mount static dev-mqueue.mount static proc-sys-fs-binfmt_misc.mount static sys-fs-fuse-connections.mount static sys-kernel-config.mount static sys-kernel-debug.mount static tmp.mount disabled brandbot.path disabled systemd-ask-password-console.path static systemd-ask-password-plymouth.path static systemd-ask-password-wall.path static session-1.scope static session-2.scope static auditd.service enabled autovt@.service enabled blk-availability.service disabled ・ ・ ・
確かに表示されました。が、ランレベルはどこいったんじゃいと、思って調べたところRHEL7からランレベルという概念がなくなっている、ということがわかりました。。。(今更。。)
じゃあそれに代わるものは何かというと、こちらになります。
/usr/lib/systemd/system/辺りを見てみると
lrwxrwxrwx. 1 root root 15 6月 21 17:12 runlevel0.target -> poweroff.target lrwxrwxrwx. 1 root root 13 6月 21 17:12 runlevel1.target -> rescue.target drwxr-xr-x. 2 root root 50 6月 21 17:12 runlevel1.target.wants lrwxrwxrwx. 1 root root 17 6月 21 17:12 runlevel2.target -> multi-user.target drwxr-xr-x. 2 root root 50 6月 21 17:12 runlevel2.target.wants lrwxrwxrwx. 1 root root 17 6月 21 17:12 runlevel3.target -> multi-user.target drwxr-xr-x. 2 root root 50 6月 21 17:12 runlevel3.target.wants lrwxrwxrwx. 1 root root 17 6月 21 17:12 runlevel4.target -> multi-user.target drwxr-xr-x. 2 root root 50 6月 21 17:12 runlevel4.target.wants lrwxrwxrwx. 1 root root 16 6月 21 17:12 runlevel5.target -> graphical.target drwxr-xr-x. 2 root root 50 6月 21 17:12 runlevel5.target.wants lrwxrwxrwx. 1 root root 13 6月 21 17:12 runlevel6.target -> reboot.target
こんな感じになっています。この.targetというのがランレベルに代わるものでそれぞれに対応するものがあります。今までのサービスは.serviceというファイルで管理されており、これらをUnitと呼ぶそうです(なかなかついていけませんが。。。)
表にするとこんな感じです。
RHEL6の表記 | RHEL7の表記 |
---|---|
runlevel0 | poweroff.target |
runlevel1 | rescue.target |
runlevel3 | multi-user.target |
runlevel5 | graphical.target |
runlevel6 | reboot.target |
そしてtargetファイルの中身ですが、こちらを見ると起動するサービスの一覧がある、、、かというとそうでもなく他のtargetファイルを読み込んでいるだけ。。。で追っても追ってもサービス名の一覧なんて見当たりません。
結局はサービス起動する一覧を見るにはsystemctl list-unit-filesが一番有効なようです。
で、ランレベル(実際はtargetですが)毎のサービス起動一覧は。。。今のところランレベルを切り替えてsystemctl list-unit-filesするしかなさそうですね。。。ほんまかいな。。。
すいません、中途半端な記事になってしまいましたがとりあえずここまでです。
その後の調査でさらにわかったことがあれば追記します。
お疲れ様でした。