Ubuntu Weekly Recipe

第557回 systemdのユニットの関係を読む

この記事を読むのに必要な時間:およそ 4 分

アクティベート順序・依存関係を見る

systemd-analyzeコマンドを使用することで,システム起動時に限って,実際のアクティベート順序を図(SVGファイル)として出力できます。また,依存関係もsystemctl list-dependenciesコマンドを利用することで,ツリー形式で見ることができます。

アクティベート順序を見る

systemd-analyzeコマンドを使って,systemd-resolved.serviceと関連ユニットのアクティベート順序を見てみます。

手順としては簡単で以下のコマンドを実行し,リダイレクトでSVGファイルを出力するだけです。

$ systemd-analyze plot > systemd-analyze.svg

このSVGファイルをブラウザで開けば,システム起動時にいつ,どのような順番でユニットがアクティベートされたかを確認できます。

次の図は,筆者で用意した環境で出力したSVGファイルの一部です。すべてを掲載すると長くなってしまうので,必要な箇所を抜粋しました。

図1 systemd-analyze plotの出力結果の抜粋

画像

さて,今回取り上げたsystemd-resolved.serviceのアクティベート順序で注目すべきはAfter=systemd-sysusers.service systemd-networkd.serviceBefore=network.target nss-lookup.target shutdown.targetでした。

今回はアクティベート順序を機能させるため,After=で指定されているsystemd-networkd.serviceを有効にしています。これは通常のデスクトップ版では,有効にされていないユニットです。

図ではsystemd-networkd.serviceの濃い赤色で示されるActivatingのバーが終わったタイミングで,systemd-resolved.serviceのバーが始まっていることを確認できます。

一方,Before=については,systemd-resolved.serviceActiveとなった後から,nss-lookup.targetnetwork.targetのバーが始まっていることを確認できます。特にnss-lookup.targetは,systemd-resolved.serviceの赤いActivatingの部分が終わったタイミングでバーが始まっています。

依存関係を見る

最後に,依存関係をツリー形式で確認します。手順は簡単で,以下のコマンドで依存関係が出力されます。

$ systemctl list-dependencies

systemd-resolved.serviceに注目し,関連しない部分を省略すると,次のようなツリーとなることがわかります。

default.target
(中略)
● └─multi-user.target
●   ├─systemd-resolved.service
(後略)

「おや,Wants=nss-lookup.targetはどこへ?」と思った人は,先のコマンドに--allをつけてみてください※7)⁠-all付きは再帰的に実行されるため出力結果が多くなってしまいますが,systemd-resolved.serviceにしぼると次のようなツリーとなっているのがわかります。

※7
デフォルトでは,.targetユニットの依存関係のみが表示されます。
$ systemctl list-dependencies systemd-resolved.service --all
systemd-resolved.service
● ├─-.mount
● │ └─system.slice
● │   └─-.slice
● ├─system.slice
● │ └─-.slice
● └─nss-lookup.target

アクティベート順序や依存関係については,多くのユニットで今回紹介した範囲の設定が使われています。これらの設定がわかれば,今回紹介したコマンドでかなり遊べるはずです。気になるサービスのユニットを調べてみるのも面白いでしょう。

著者プロフィール

たなかあきら

Ubuntu Japanese Team Member。ちょっとお高い電子辞書を買ったので,楽しく翻訳をしていたところ,気づいたらメンバーになっていました。

コメント

コメントの記入