Mir ist der folgende Thread bekannt und angeblich eine Antwort darauf . Mit der Ausnahme, dass eine Antwort keine generische Antwort ist. Es zeigt, was das Problem in einem bestimmten Fall war, aber nicht im Allgemeinen.
Meine Frage ist: Gibt es eine Möglichkeit, Bestellzyklen generisch zu debuggen ? ZB: Gibt es einen Befehl, der den Zyklus beschreibt und der eine Einheit mit einer anderen verbindet?
Ich habe zum Beispiel Folgendes journalctl -b
eingegeben (bitte Datum ignorieren, mein System hat keine RTC, mit der die Zeit synchronisiert werden kann):
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
Dabei ist cvol.service (derjenige, der eingeführt wurde und den Zyklus unterbricht):
[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
Laut journalctl möchte cvol.service basic.service, abgesehen davon, dass dies nicht der Fall ist, zumindest nicht offensichtlich. Gibt es einen Befehl, der zeigt, woher dieser Link stammt? Und im Allgemeinen gibt es einen Befehl, der die Zyklen findet und anzeigt, woher die einzelnen Verknüpfungen im Zyklus stammen?
systemd-analyze verify UNIT
die Richtigkeit des Geräts überprüfen. Hinter den Kulissen erstellt dieser Befehl eine Instanz des virtuellen Systems und versucht, die angegebene UNIT als erste Transaktion zu laden (als ob dies der Fall wäredefault.target
). Dadurch werden keine neuen Informationen angezeigt (im Vergleich zu Protokollen), aber Sie müssen zumindest nicht mit aktiviertem Gerät neu starten, um festzustellen, ob es fehlschlägt.Sie können den Zyklus mit den Befehlen visualisieren
systemd-analyze verify
,systemd-analyze dot
und das GraphVizdot
- Tool:Sie sollten so etwas sehen:
Hier können Sie den Zyklus sehen:
c.service->b.service->a.service->c.service
Links:
quelle
systemd-analyze verify
existiert hier nicht auf einer debian 8 install.systemd-analyze verify
verfügbar seitv216
. versuchen Sie essystemd-verify
. Existiert es?systemd-analyze verify default.target
allein macht einen anständigen Job in der Darstellung der Schleife ...Schritt 1: Führen Sie den Überprüfungsbefehl für default.target aus
Schritt 2: Beobachten Sie, welcher Dienst oder welches Ziel in der Meldung "Systemd Brechen des Bestellzyklus durch Löschen eines Auftrags" erwähnt ist, und zeigen Sie die vollständige Abhängigkeitsliste an
Schritt 3: Sehen Sie sich die "after" - und "before" -Gruppen in der normalerweise in definierten Dienst- oder Zieldatei an
und finden Sie die Dienste oder Ziele, von denen bekannt ist, dass sie sequentiell sind, jedoch in ausgehender Reihenfolge für diesen.
Beispiel:
ist in der Regel Markt "nach"
aber "vor"
Eine solche Abhängigkeit kann leicht durch einen Anruf beobachtet werden
allerdings wenn die datei
enthält Zeilen wie:
oder
oder beides gleichzeitig bedeutet, dass dbus.service als ausgehend definiert ist und einen endlosen Systemzyklus verursacht.
Die Heilung ist einfach - ändern Sie das Wort "Nach" in "Vorher" und umgekehrt, falls erforderlich.
quelle