私が質問の下で何を意味するか:systemdが指定されたユニットのセットを実行した方法を確認するために順序付きリストをダンプする方法はありますか(つまり、依存関係が解決され、ジョブが実行のためにキューに入れられた後のツリー) ? systemdの状態データを分析することで実行できることを知っていますが、そのようなツリーをすばやく確認する方法はありますか?これは、障害の調査に非常に役立ちます(たとえば、ブートプロセスが一部のユニットでスタックしていることがわかった場合は、より詳細な調査のためのおおよその場所を特定できます。
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
└─[email protected] @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に付属しています。それを扱っているサードパーティのプロジェクトもいくつかあると思います。
質問が適切に理解されているかどうかはわかりませんが、次のコマンドでツリーを視覚化できます。
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:
fbi
はsshでは機能しません。このように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 [email protected]:/home/user /mnt/yourmountingdir/ -o allow_other #Asks for Host trusting and password
Sudo fusermount -u /mnt/yourmountingdir/ #To disconnect and unmount
あなたの質問にまだ完全には答えていないかもしれませんが、--fuzz
オプション
systemd-analyze critical-chain --fuzz 1h
Unit sを指定してcritical-chainを表示することもできるので、multi-user.target
systemd-analyze critical-chain network.target local-fs.target
お役に立てれば