initとは
- initは他のプロセスを起動させる役割を持っており、全てのプロセスの親である
- Linuxカーネルの起動後、一番最初に起動される
- PIDは1が付与される
initの確認
- PIDが1かどうかの確認
$ ps 1
PID TTY STAT TIME COMMAND
1 ? Ss 0:01 /sbin/init maybe-ubiquity
- 全てのプロセスの親になっているかどうかの確認
$ pstree
systemd─┬─accounts-daemon───2*[{accounts-daemon}]
├─atd
├─cron
├─dbus-daemon
├─irqbalance───{irqbalance}
├─login───bash
├─lvmetad
├─lxcfs───2*[{lxcfs}]
├─networkd-dispat───{networkd-dispat}
├─polkitd───2*[{polkitd}]
├─rsyslogd───3*[{rsyslogd}]
├─snapd───11*[{snapd}]
├─sshd───sshd───sshd───bash───pstree
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-network
├─systemd-resolve
├─systemd-timesyn───{systemd-timesyn}
├─systemd-udevd
└─unattended-upgr───{unattended-upgr}
initの種類
名前 | 説明 |
---|---|
SysVinit | ・最初期のinit ・プロセスの起動を並列処理できないといった欠点を持つ |
launchd | ・2005年に登場 ・macOSで採用されている |
Upstart | ・2006年に登場 ・SysVinitと完全な互換性を持ちながらも並列処理に対応していた ・しかし、プロセスが起動する条件を設定ファイルに記述する必要があり、条件が揃うと無条件で起動/停止されるため、不必要な操作が行われる可能性があった |
Systemd | ・RedHat社のLennart Poettering、Kay Sieversらによって2010年にリリースされた ・起動を高速にし、設定をシンプルにすることを設計思想としている ・批判的な意見もあったが、2011年頃からFedoraを皮切りに主要なLinuxディストリビューションで採用され始めた ・RHEL、CentOS、Debian、Ubuntu、Arch Linux等で採用されている ・Upstartと違い、必要なプロセスのみを起動できる作りになっている ・並列処理が可能 |
OpenRC | ・Gentoo Linuxで採用されているinit |
SysVinit/Upstartの起動の流れ
- SysVinit/Upstartではサービスと呼ばれる単位で処理を管理している
- 起動の流れとしては、まず
/sbin/init
がPID=1として実行され、その後、/etc/inittab
によって2つのファイルが実行される - まず1つ目は、
/etc/rc.d/rc.sysvinit
によってシステムの初期化(ファイルシステムの整合性チェック、マウント処理、スワップの有効化等)が行われる - そして2つ目は、
/etc/rc.d/rc
によって/etc/init.d/
以下に存在するファイルが順番に実行され、サービスが起動される - また、SysVinit/Upstartは
service
コマンドによって操作することができる
Systemdの起動の流れ
- SystemdはUnit(後述)と呼ばれる単位で処理を管理している
- Systemd環境でも
/sbin/init
は存在するが、大抵は/lib/systemd/systemd
へのシンボリックリンクとなっている - 起動の流れとしては、まず
/usr/lib/systemd/systemd
が起動する - その後、Unitの依存関係を検索し、有効化すべきUnitの一覧が作成される
- 一覧を基に、順序関係に基づいてUnitを順番に有効化する
- 順序関係を持たないUnitは並列に起動処理が行われる
- ちなみに設定ファイルは
/usr/lib/systemd/system
と/etc/systemd/system
に配置されている - 前者はシステムが用意したデフォルトの設定ファイルで、後者は管理者がカスタマイズするための設定ファイルである
- 同名の設定ファイルがある場合、
/etc/systemd/system
が優先される - また、Systemdは
systemctl
コマンドで操作することができる
Unitとは
-
/usr/lib/systemd/system
と/etc/systemd/system
以下に配置されているファイルは、拡張子が主に以下の5つのどれかになっており、拡張子によってUnitの種類が判別される
Unit | 説明 |
---|---|
service | サービス(デーモン) |
target | ターゲット(複数のUnitをグループ化したもの) |
mount | マウントポイント |
swap | スワップ領域 |
device | デバイス |
journald
- journaldはSystemd環境で標準で提供されているログの管理サービスで、システムやサービスのログを収集している
- また、Linuxではrsyslogというログの管理サービスが存在するが、これはjournaldが必要に応じてrsyslogに転送している
- また、journaldは、
journalctl
コマンドで操作することができる