systemd の概要
systemd を採用したプロセスでは init プロセスの代わりに systemd プロセスが起動し、各種サービスを管理する。
systemd では以下のような複数のデーモンプロセスが連携して動作する。
プロセス | 説明 |
---|---|
systemd | systemd のメインプロセス |
systemd-journald | ジャーナル管理プロセス |
systemd-logind | ログイン処理プロセス |
systemd-udevd | デバイス動的検知プロセス |
systemd では、システムの起動処理は多数の Unit と呼ばれる処理単位に分かれており、サービスを起動する Unit や、ファイルシステムをマウントする Unit などがある。
Unit の種類 | 説明 |
---|---|
service | 各種サービスを起動する |
device | 各種デバイスを表す |
mount | ファイルシステムをマウントする |
swap | スワップ領域を有効にする |
target | 複数の Unit をグループ化する |
systemd では、サービス A を起動するには先にサービス B を起動する、といった各種サービスの依存関係や順序関係を処理できる。
systemd の起動手順
システムが起動すると、まず default.target という Unit が処理される。この Unit の設定ファイルは /etc/systemd/system 以下に存在する。
$ ls -l /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 37 Mar 23 17:51 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
multi-user.target はマルチユーザーモードで起動するサービスをまとめた Unit (ターゲット) である。default.target を multi-user.target のシンボリックリンクとすることにより、従来のデフォルトランレベルのような機能を実現している。
このように、ターベットが従来のランレベルに相当する。
ランレベル | ターゲット |
---|---|
0 | poweroff.target |
1 | rescue.target |
2,3,4 | multi-user.target |
5 | graphical.target |
6 | reboot.target |
なお、graphical.target にランレベル 5 で必要だったすべてのサービスが含まれているわけではない。
graphical.target にはマルチユーザー環境で必要なサービスを起動する multi-user.target が、multi-user.target にはランレベルにかかわらず必要なサービスを起動する basic.target という Unit が紐づけられている。
したがって、graphical.target を起動すると、グラフィカル環境に必要なすべてのサービスが起動することになる。
systemctl によるサービスの管理
systemd でサービスを管理するには systemctl コマンドを用いる。
ランレベル | ターゲット |
---|---|
start | サービスを起動する |
stop | サービスを終了する |
restart | サービスを再起動する |
reload | サービスの設定を再読み込みする |
status | サービスの稼働状況を表示する |
is-active | サービスが稼働しているかどうかを確認する |
enable | システム起動時にサービスを自動起動する |
disable | システム起動時にサービスを自動起動しない |
list-unit-files | すべての Unit を表示する |
reboot | システムを再起動する |
poweroff | システムをシャットダウンする |
- コマンド実行例
$ sudo systemctl status cloud-config.service
● cloud-config.service - Apply the settings specified in cloud-config
Loaded: loaded (/usr/lib/systemd/system/cloud-config.service; enabled; vendor preset: disabled)
Active: active (exited) since Wed 2018-05-09 01:44:45 UTC; 23min ago
Main PID: 1175 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/cloud-config.service
May 09 01:44:44 ip-172-31-23-74.ap-northeast-1.compute.internal systemd[1]: Starting Apply the settings specified in cloud-config...
May 09 01:44:45 ip-172-31-23-74.ap-northeast-1.compute.internal cloud-init[1175]: Cloud-init v. 0.7.9 running 'modules:config' at Wed, 09 May 2018 01:44:45 +0000. Up 10.01 seconds.
May 09 01:44:45 ip-172-31-23-74.ap-northeast-1.compute.internal systemd[1]: Started Apply the settings specified in cloud-config.
$ sudo systemctl list-unit-files | head
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 enabled
$ sudo systemctl enable tmp.mount
Created symlink from /etc/systemd/system/local-fs.target.wants/tmp.mount to /usr/lib/systemd/system/tmp.mount.
上記の例をみると、/etc/systemd/system 以下のファイルが操作されていることがわかる。
/etc/systemd/system ではホストごとに修正された Unit の設定ファイルが配置される。また、オリジナルの設定ファイルは /usr/lib/systemd/system または /lib/systemd/system に配置されている。
/etc/systemd/system/multi-user.target.wants 以下には multi-user.target に含まれる Unit を確認可能。
$ ls /etc/systemd/system/multi-user.target.wants/
auditd.service chronyd.service cloud-final.service cloud-init.service irqbalance.service NetworkManager.service remote-fs.target rsyslog.service tuned.service
brandbot.path cloud-config.service cloud-init-local.service crond.service kdump.service postfix.service rhel-configure.service sshd.service