わかりました次のスレッドという答えなさい。しかし、答えは一般的な答えではありません。これは特定のケースの問題を示していますが、一般的なものではありません。
私の質問は:ソートサイクルをデバッグする方法はありますか?一般的などのように?例:ループを説明し、あるデバイスが別のデバイスに接続される理由を説明するコマンドはありますか?
たとえば、次のようになりますjournalctl -b
(日付を無視します。私のシステムには時間を同期させるRTCはありません)。
Jan 01 00:00:07 host0 systemd[1]: Found ordering cycle on sysinit.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on local-fs.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on cvol.service/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on basic.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on sockets.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on dbus.socket/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on sysinit.target/start
Jan 01 00:00:07 host0 systemd[1]: Breaking ordering cycle by deleting job local-fs.target/start
Jan 01 00:00:07 host0 systemd[1]: Job local-fs.target/start deleted to break ordering cycle starting with sysinit.target/start
ここで、cvol.service(ループを破るために導入されたサービス)は次のとおりです。
[Unit]
Description=Mount Crypto Volume
After=boot.mount
Before=local-fs.target
[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/bin/cryptsetup open /dev/*** cvol --key-file /boot/***
[Install]
WantedBy=home.mount
WantedBy=root.mount
WantedBy=usr-local.mount
Journalctlによると、cvol.serviceはbasic.serviceを望んでいますが、少なくとも明らかではありませんが、そうではありません。このリンクのソースを示すコマンドはありますか?一般に、ループを探してループ内の各リンクのソースを表示できるコマンドはありますか?
ベストアンサー1
コマンドを使用してループを可視化できますsystemd-analyze verify
。systemd-analyze dot
グラフィックビジュアライゼーション dot
ツール:
systemd-analyze verify default.target |&
perl -lne 'print $1 if m{Found.*?on\s+([^/]+)}' |
xargs --no-run-if-empty systemd-analyze dot |
dot -Tsvg >cycle.svg
次の内容が表示されます。
ここでこのループを見ることができます。c.service->b.service->a.service->c.service
Color legend:
black = Requires
dark blue = Requisite
dark grey = Wants
red = Conflicts
green = After
リンク: