概要
- 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までのシンボリックリンクも用意されている。) |