概要
- SysVinitに代わる新しいinitの仕組み。
- 扱う処理をUnitという単位で管理する。
- サービスの並列起動によって高速なシステム起動や停止が行える
- cgroupsでプロセスのリソースを管理する。
通常システムの起動(SysVinitの場合 )は下記の順番で行われる
- BIOS
- ブートローダ
- カーネル
- init (/sbin/initのこと)
- /etc/inittab を読み込む
- /etc/rc.sysinit スクリプトを実行する
- /etc/rc スクリプトを実行する
- /etc/rc スクリプトが /etc/rc<ランレベル>.d/ 以下のスクリプト実行(root権限必要)
最近は上記 ”4”のinitの代わりに ”systemd” が使用されている。
systemdの特徴
- ユニット
- systemdは、ユニット(unit)単位でシステムを管理。
- 管理しているユニットは、/etc/systemd/system/ 以下に各拡張子を持ったファイルで保存される
拡張子 機能 device 各種デバイスを管理するUnit mount ファイルシステムのマウントを管理するUnit service サービスを制御するUnit swap スワップ領域を管理するUnit target 複数のサービスを一つのグループにするためのUnit
- システム起動時に最初に実行されるUnit → /etc/systemd/system/default.target
- システム管理の統一
- 以前のsysVinitではサービスの管理方法が統一されていない(ディストリビューションごとに違う)
- systemdでは管理方法が一本化され、異なるディストリビューションでも同様の操作での対応が可能。
- 起動速度
- systemdはsysVinitに比べてシステム(system)の起動速度が速い。
- sysVinitはサービスの起動を1サービスずつ順番に行っていくシェルスクリプト方式を採用
- systemdはユニット処理を同時に実行できるため、起動にかかる時間が少ない。
- 起動時は一部の機能だけの起動が優先的に行い、後から他に必要なものを必要なタイミングで起動する。
- Cgroup
- cgroup(Control Group)はプロセスをグループ化して,そのグループ内に存在するプロセスに対して共通の管理を行う
- ホストOSが持つCPUやメモリなどのリソースに対して,グループごとに制限をかけることができます。
- 以下のデーモンプロセスが連携して動作。
プロセス名 機能 systemd systemdの本体となるプロセス。initの代わりに常駐 systemd-journald systemdが制御する各サービスが出力するログを扱う systemd-logind システムへのログイン、起動停止、電源ボタン操作などを管理 systemd-udevd 従来のudevに代わり、デバイスの動的変更、検出を行う - SysVinitのランレベルとsystemdのターゲット比較。 /lib/systemd/system に格納
ランレベル ターゲット 0 poweroff-target 1 rescue.target 2,3,4 multi-user.target 5 graphical.target 6 reboot.target
次回起動時にグラフィカルログインさせる ー> default.target を graphical.target のシンボリックリンクに設定。
rm -f /etc/systemd/system/default.target
ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target
systemctl
systemdを管理するためのコマンド。
書式:systemctl[サブコマンド]
サブコマンド | 用途 |
disable | サービスの自動起動を無効にする |
enable | サービスの自動起動を有効にする |
is-enable | 有効の場合はenabledを、無効の場合はdisabledを返します |
get-default | 次回起動時のターゲットを表示する |
halt | システムを停止しhalt状態にする |
is-active | サービスが稼働しているかを表示 |
list-unit-files | すべてのUnit定義ファイルを一覧表示する |
reboot | システムを再起動する |
reload | サービス設定ファイルを再読込する |
restart | サービスを再起動する |
set-default | 次回起動時のターゲットを設定する |
start | サービスを起動する |
status | サービスの状態を表示する |
stop | サービスを停止する |
poweroff | システムを停止し電源を切断する |
default | システムをデフォルトのモードにする |
mask | サービスが起動出来ない |
unmask | maskの解除 |
例:
システムを今すぐ再起動さる | systemctl start reboot.target |
systemctl reboot | |
telinit 6 | |
shutdown -r now | |
systemctl rescue後、通常の起動状態に戻す |
Ctrl-Dを入力する |
systemctl reboot コマンドを実行する |
|
systemctl default コマンドを実行する |
|
次回起動時にグラフィカルログインさせる | systemctl set-default graphical.target |
次回起動時のターゲットを確認 | systemctl get-default |
次回起動時にメンテナンスを行うために最低限のシステムサービス状態で起動 | systemctl rescue.target |
systemctl runlevel1.target (SysVinitとの関連が分りやすい様に、runlevel0.target〜runlevel6.targetまでのシンボリックリンクも用意されている。) |