unit は他の unit と依存関係をもてる • Wants: B を active にするなら A も active にした いが A が無い場合や失敗しても OK • Requires: B を active にするなら A も active にし する。 A が成功しないと B は失敗 • After: B を activating にするのは A を activating にしたあと • Conflicts: A と B は同時に Active になれない A B Wants A B After A B Conflicts A B Requires
unit 初期化イメージ multi-user .target crond .service NetworkManager .service Wants Wants After time-sync .target network .target network-pre .target chronyd .service After After chrony-wait .service After Require Before Wants Before Wants systemd は 多数の unit 間の 依存関係を見て 何を active に するか、順序を どうするか決める 起動設定 : これを active に するぞ Wants
のきっかけ • Activation on boot: 起動処理。通常は default.target unit を有効化する。 • Socket-based Activation: systemd が xinetd のようにソケット待ちうけを行 い着信を契機に対応する service の unit を有効化してソケットを引きつぐ。 socket unit と service unit の組み合わせで定義する。 • Timer-based Activation: systemd が時刻やタイムアウトなどを契機に service unit などを有効化する。 timer unit と service unit の組み合わせで定義する。 • Device-based Activation: linux kernel が検出したハードウェアの挿抜や変更 を契機として device unit を作成し、そこからの依存関係で mount unit や service unit などを有効化する。 fstab での mount 処理などは device-based activation で実施される。
systemd cgroup, ulimit, namespace, 環境変数 etc. service process child process main process 1. exec() して環境の中でサービス 実行開始 . daemon 化して exit() 2. PID ファイルなどで main process を systemd が推定 pidfile
daemon 化による端末との切り離し rc service process child process main process pidfile term term cd / stdin, stdout, stderr を /dev/null へ接続 fork() setsid() 端末から影響されない daemon 化をする目的は端末から 切り離して • (SIGPIPE, SIGSTOP, SIGTERM などの ) シグナルを受けない • 画面にゴミを出さない
systemd child process main process socket READY=1 1. fork, exec しただけでは unit は active ではなく activating 2. libsystemd の sd_notify() 関数で準備完了のメッセージを 受けとると active にする
を起動する foo .socket foo .service systemd では「イベントを契機にして service を起動する」仕組 みを提供し、 unit の組み合わせとして管理する • socket, path, timer • イベントを検出するとデフォルトでは 同じ名前の .service を active にする – Service= で任意の service unit を指定できる After
page • systemd.resource-control (5): unit に対する cgroup でのリ ソース制御。 cgroup v1 、 v2 の違いは Unified and legacy control group hierarchies 節にまとまっている。 • RHEL7 ドキュメント「リソース管理ガイド」 https://access.redhat.com/documentation/ja-jp/red_hat_enterpri se_linux/7/html-single/resource_management_guide/index • linux kernel ドキュメント「 Control Group v2 」 https://www.kernel.org/doc/Documentation/cgroup-v2.txt
• https://systemd.io/ systemd project ホームページ • https://www.freedesktop.org/wiki/Software/systemd/ 旧 systemd ホームページ – 特に運用管理者には The systemd for Administrators Blog Series を推奨します