systemdの実行ツリーを表示する方法はありますか?


63

私が質問の下で意味することは、順序付きリストをダンプして(pstreeがプロセスに行うように)、systemdが指定されたユニットのセットを実行した方法、つまり依存関係が解決され、ジョブが実行のためにキューに入れられた後のツリーを見る方法です?systemd状態データを分析することでそれができることは知っていますが、そのようなツリーをすばやく見る方法はありますか?これは、障害の調査に大いに役立ちます(たとえば、ブートプロセスが一部のユニットでスタックしていることがわかった場合は、より詳細な調査のためのおおよその場所を特定できます。


systemdのvisualiztionツールを作成しました。このツールはgithub.com/ywiyogo/systemd-visualで
Yongkie

回答:


71

systemd-analyzeあなたの友達です。たとえばsystemd-analyze critical-chain、デーモンのブロッキングツリーを出力します。私の例:

graphical.target @20.211s
└─multi-user.target @20.211s
  └─nginx.service @19.348s +862ms
    └─network.target @19.347s
      └─NetworkManager.service @10.315s +9.031s
        └─basic.target @10.312s
          └─timers.target @10.311s
            └─systemd-tmpfiles-clean.timer @10.311s
              └─sysinit.target @10.295s
                └─systemd-update-utmp.service @10.167s +127ms
                  └─systemd-tmpfiles-setup.service @10.124s +41ms
                    └─local-fs.target @10.097s
                      └─home-entd-Downloads.mount @10.093s +2ms
                        └─home.mount @9.326s +672ms
                          └─systemd-fsck@dev-sda6.service @8.472s +696ms
                            └─dev-sda6.device @8.471s

例のNetworkManagerは、基本的にブートアップ全体を保持します。

より詳細なビューが必要な場合は、実行チェーン全体をsvgファイルにレンダリングできます。 systemd-analyze plot > something.svgチェーン全体(120以上のモジュール)をプログレスバーとして高解像度svgファイルに出力します。このファイルには、ブロックされている状態や別の問題が表示されます。

最後にsystemd-analyze dot、階層全体を出力するドットファイルを出力する systemd-analyze dot | dot -Tpng -o stuff.png ツールがあります。ドットツールを使用すると、psファイルおよびsvgファイルとしても出力できます。

上記のツールはすべてsystemd-analyzeツールに組み込まれており、少なくともデフォルトではarchlinuxのsystemdに付属しています。それを扱っているサードパーティのプロジェクトもいくつかあると思います。


あなたの答えをありがとう、しかし、それは質問に対処せず、私の質問の一部を繰り返します(私はsystemdの状態データを分析することでそれを行う方法を知っていると述べました)。したがって、問題は、すべての依存関係が解決された後(ブート後など)ブートアップシーケンスのpstreeのようなツリーを取得する方法です。クリティカルチェーンはほとんど(ボトムアップツリーであるにもかかわらず)ですが、すべての開始ユニットをリストしているわけではありません。質問で尋ねられるのは、ある時点まで実行されたすべての単一ユニットをリストするツリーです(たとえば、multi-user.targetにヒットする)。
銀河14

4
systemd-analyze plot > something.svgターゲットを使用した完全な3つの実行です(必要なものに最も近い)。systemd-analyzeドットは、依存関係の完全なグラフです(最も正確な表現です)。これらはあなたが望むものではありませんか?プロットでターゲットを見つけ、実行する必要があるものを確認します。グラフ分析ツールキットを起動し、依存関係を表示するグラフポイントを選択すると、同じ依存関係が正確にグラフにリストされます(ドットツールにはより多くの設定があります)。manページを参照してください:freedesktop.org/software/systemd/man/systemd-analyze.html --orderと類似した
IBR

1
「のavahi-デーモン」:manページから、これは名前で始まるいずれかのユニットのすべての依存関係をプロットします。 $ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg $ eog avahi.svgこれは、すべての既知のターゲットユニット間の依存性をプロット:systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg $ eog targets.svg
IBR

1
IBrですが、残念ながらこれはテキストコンソールでは使用できません。あなたが答えに費やした時間を本当に感謝しています(そして、分析するためにいくつかのデータを取得したい場合は正しいです)が、元の質問に対処していないので、私はそれを受け入れることができます。ごめんなさい。
銀河14

1
問題ありません。私は自分でコマンドラインツールが大好きです:)
IBr 14

13

それでも質問に完全には答えられないかもしれませんが、--fuzzオプションで試してください

systemd-analyze critical-chain --fuzz 1h

あなたも単位を指定することができますのを彼らの見るために重要なチェーンを使用すると、これらに限定されていないので、multi-user.target

systemd-analyze critical-chain network.target local-fs.target

お役に立てれば


12

私が質問を適切に理解しているかどうかはわかりませんが、次のコマンドでツリーの視覚化を利用できます:

sudo systemctl status

そしてまた:

sudo systemctl list-dependencies 

お役に立てれば :)

また、systemctl symlinksフォルダーのツリーを構築することは、他の目的にも役立つ場合があります。

tree /etc/systemd/system

実際に、システムの起動を遅くしている古い/バグのあるユニットを見つけて、後でsystemctl disableコマンドを使用してそれらを無効にすることは本当に役に立ちました。

編集

つまり、この基本機能はグラフィカルツールではなく、コマンドラインツールを介して提供する必要があるというOPに本当に同意します。Xを起動できない場合はどうでしょうか。では、svgファイルをどのように処理しますか?

実際には、方法があります。scp(sshツール)を使用して別のコンピューターでファイルを取得できない場合、fbi実際に役立つ可能性があります:)

sudo systemd-analyze plot > /home/user/startup.svg
fbi /home/user/startup.svg

私のTTYで働いていました。画像内を矢印で移動するだけです。リストするためのズームオプションがありますfbi -h

繰り返しますが、これが役立つことを願っています。ArchlinuxおよびUbuntuリポジトリで利用可能です。

編集2:

fbisshでは機能しません。このようにX転送を行うことができssh -Y user@serverますが、リモートサーバーで実行されているXサーバーが必要です。

ここでの最善策はを使用することsshfsです。これは、たとえばnautilusを使用して、ユーザースペースで素晴らしい動作をします。少し設定する必要があります。以下を参照してください。

sudo vim /etc/fuse.conf #type a, uncomment the user_allow_other line and ESC :wq
sudo mkdir /mnt/yourmountingdir
sudo chown user:user /mnt/yourmountingdir
sshfs user@remotemachine.com:/home/user /mnt/yourmountingdir/ -o allow_other #Asks for host trusting and password
sudo fusermount -u /mnt/yourmountingdir/ #To disconnect and unmount

問題は、依存関係の解決後にsystemdが実行したすべてのアクティブ化されたユニットの実行ツリーに関するものです。したがって、この答えは間違いです。
銀河

おそらくあなたの質問は機能のリクエストに適していますか?確かに役立つでしょう。とにかく、私はあなたの質問につまずいた後にこの答えを投稿しました、それは何らかの情報が必要な別の質問に似ていたので、いくつかの基本的な例が不足していると感じましたSystem V initとその便利なrc.confファイルを失った後に苦労している私のような人にとっては特に)を明確にするのに役立ちました。申し訳ありませんが、私の答えが合わなかった。しかし、下票の価値はありません。
Joel.O

問題の回避策で編集されました。それが再び役立つことを願っています。
-Joel.O

サーバーでsshを介してfbiを使用できませんでした。しかし、sshfsさらに良く機能します。編集2を参照してください。
Joel.O17年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.