「systemd実践入門」の読書記録
Software Design 2018年2月号の特集「systemd実践入門」の読書記録です。
systemdとは何か?
Linuxで使われているブートシステム。ユーザーランドのプロセス起動とマネジメントを行う。
systemdはLinuxの起動システムであるUpstartやSysVinitの代替として2010年にLennart Poettering氏を中心として開発がスタート。
その後、2011年にRed hat Enterprise Linux 7とCent OS 7に採用、2015年にはDebian, Ubuntuのデフォルトの起動システムとして採用された。
wikipediaによるとメジャーなディストリビューションではほぼほぼデフォルトでブートされるようです。
主なLinuxディストリビューションのsystemd採用例
Google Compute EngineでKVM上に立ち上がる仮想マシン(Ubuntu 16.04)でもsystemdが動作してることが確認できました。
基本的にはSysV, LSBといった古いブートマネージャと互換性を保ったプログラムのようです。https://wiki.ubuntu.com/systemd
SysVinitとの違い
SysVinitでは/etc/inittab
の定義をもとにスクリプトを順次実行していくが、
systemdではユニットと呼ばれる単位で並列にシステムを起動するため起動時間全体が高速化される。
SysVinitの起動の例
systemdの起動の例
ユニット
ユニットはsystemdが処理する単位で、サービスやターゲット、デバイスなど役割ごとに種類がある。
システムの起動時には定義されたユニットを並列に処理する事で起動時間が高速化される。
ユニットは種類ごとに拡張子を持つ設定ファイルとして用意されている。
設定ファイルの拡張子 | 説明 |
---|---|
.service | プロセスの起動、停止、再起動などの定義 |
.device | udevによってデバイスが認識されたときに作られる |
.target | 複数のユニットをグループにしたもの |
.socket | IPC, ネットワークソケット, FIFOの定義 |
.path | 指定したパスを監視して変化に応じて処理を実行する |
.timer | さまざまな時間指定によって処理を実行する |
.mount | マウントポイント。fstabによる自動生成もしくは定義 |
.automount | 自動マウントポイント。fsbtabによる自動生成もしくは定義 |
.swap | スワップ領域。fstabによる自動生成もしくは定義 |
service
拡張子が.service
の設定ファイルに設定内容を定義する事で起動、終了、再起動などを制御する事ができる。
起動したプロセスはcgroups管理下となりCPUやメモリなどのリソースを制御することもできる。
systemdはプロセスの状態を常時把握している。
/usr/lib/systemd/system/
は、パッケージが提供するファイルを設置するディレクトリ/etc/systemd/system/
は、システム管理者が設定を修正したい場合にファイルを設置するディレクトリ
同名のファイルがどちらにもあった場合は/etc/systemd/system/
の方が優先される。
sudo systemctl restart sshd.service
[Service] Type=notify EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure ReatartSec=42s