Systemd は現在の多くの Linux ディストリビューションで使われる、PID 1 の init・サービスマネージャーです。systemd プロジェクトはログ、デバイス、ログイン、ネットワーク、時刻などのコンポーネントも提供しますが、どの部分を採用するかはディストリビューションが選べます。
Init · レッスン 5
systemd の概要
systemd がユニットを読み込み、依存関係を解決し、ターゲットを有効化して、システムとユーザーのリソースを管理する仕組みを学びます。
稼働中のマネージャーを確認する
インストール済みディレクトリの有無ではなく、実際の状態を調べます。
$ ps -p 1 -o pid,comm,args=
$ systemctl is-system-running
別のプログラムが PID 1 のシステムにも /usr/lib/systemd/ が存在する場合があり、コンテナは独自の PID 名前空間を公開できます。また、systemctl にはユーザーマネージャー用やリモート・コンテナ用のモードもあります。操作の対象となるマネージャーを特定してください。
systemd がシステムの init マネージャーであることを最も直接的に示すものはどれですか?
管理対象オブジェクトとしてのユニット
ユニットは、リソースまたは活動を表す systemd の名前付きモデルです。一般的なユニットタイプには次のものがあります。
- プロセスとデーモンを表す
.service - ソケットアクティベーション用の
.socket - ファイルシステム用の
.mountと.automount - イベント駆動の有効化に使う
.timerと.path - グループ化と同期に使う
.target - そのほかの管理対象リソースを表す
.device、.swap、.slice、.scope
ユニットの状態は常に「実行中」とは限りません。マウントはマウント済み、タイマーは待機中、デバイスは存在、ターゲットは依存関係へ到達した後にアクティブ、という状態になれます。
ほかのユニットをまとめ、同期点を提供するためによく使うユニットタイプはどれですか?
ユニットの読み込みパスと上書き
システムユニットは、次のようなディストリビューション用および管理者用のパスから読み込まれます。
- 多くのディストリビューションで、パッケージ提供ユニットを置く
/usr/lib/systemd/system/ - 実行時に生成した設定や一時設定を置く
/run/systemd/system/ - 永続的なローカル管理者設定と上書きを置く
/etc/systemd/system/
ベンダー用の正確なパスは環境によって異なります。同じユニット名では、優先度の高いローカル設定が優先度の低いファイルを上書きします。パッケージ更新による変更を確認できるよう、ベンダーファイル全体をコピーして変更するより、systemctl edit UNIT でドロップイン上書きを作る方法を優先してください。
永続的なローカルのシステムユニット上書きは、通常どこに置くべきですか?
依存関係と順序
Systemd は依存関係からトランザクションを構築します。Wants= と Requires= は、強さの異なる依存関係としてほかのユニットをトランザクションへ取り込みます。Before= と After= は、両方のユニットが予定されている場合の順序を指定しますが、それ自体で別のユニットを開始させることはありません。
After=network.target という行があっても、利用可能な接続、DNS、特定のリモートエンドポイントの準備完了は保証されません。サービスは適切な network-online 連携を使うか、独自に再試行と準備完了の処理を実装する必要があります。
After=other.service だけでは何を指定しますか?
ターゲットと既定の起動トランザクション
default.target は通常、multi-user.target や graphical.target などのターゲットへの別名です。Systemd はそのターゲットと依存関係のトランザクションを開始し、明示された順序を守りながら、無関係な処理を並行して進めます。
ターゲットがランレベルに似ているのは、大まかな互換性の範囲だけです。複数のターゲットを同時にアクティブにでき、独自のターゲットも作成できます。また、ターゲットがアクティブでも、マシン上の全サービスが正常とは限りません。
default.target は通常何を選択しますか?
レッスン完了
systemd の概要 を完了しました
systemd を、稼働中のマネージャー、ユニット、トランザクションという観点で説明できるようになりました。
関連する PID 1 とマネージャー接続を通じて systemd を確認する。
リソースの種類をユニットの接尾辞に対応付ける。
ローカルの上書きをベンダー設定より優先度の高い場所へ置く。
依存関係の強さ、順序、アプリケーションの準備完了を区別する。
ターゲットを排他的な状態ではなく、グループと到達点として扱う。