Gibt es eine Möglichkeit, den Ausführungsbaum von systemd anzuzeigen?

63

Was ich unter der Frage meine, ist: Gibt es eine Möglichkeit, die geordnete Liste zu sichern (wie es pstree für Prozesse tut), um zu sehen, wie systemd die gelieferte Menge von Einheiten ausführt, dh den Baum, nachdem die Abhängigkeiten aufgelöst und Jobs für die Ausführung in die Warteschlange gestellt wurden ? Ich weiß, dass Sie dies durch die Analyse von Systemzustandsdaten tun können, aber gibt es eine schnelle Möglichkeit, einen solchen Baum zu sehen? Dies würde bei der Untersuchung von Fehlern sehr hilfreich sein (z. B. wenn Sie feststellen, dass der Startvorgang bei einem Gerät blockiert ist, können Sie den ungefähren Ort für Ihre eingehendere Untersuchung bestimmen.

Galaxis
quelle
Ich habe ein Visualisierungstool für systemd erstellt. Sie können das Tool unter github.com/ywiyogo/systemd-visual
Yongkie

Antworten:

71

systemd-analyzeist dein Freund. Zum Beispiel systemd-analyze critical-chaingibt sie einen blockierenden Baum von Daemons aus. Meins zum Beispiel:

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 im Beispiel hält im Grunde den gesamten Systemstart.

Wenn Sie eine detailliertere Ansicht wünschen, können Sie die gesamte Ausführungskette in einer SVG-Datei rendern. systemd-analyze plot > something.svgGibt die gesamte Kette (über 120 Module) als Fortschrittsbalken in eine hochauflösende SVG-Datei aus, die blockierte Zustände und andere Probleme anzeigt.

Endlich haben Sie ein systemd-analyze dotWerkzeug, das eine Punktdatei ausgibt, die die gesamte Hierarchie ausgibt: systemd-analyze dot | dot -Tpng -o stuff.png Mit dem Punktwerkzeug können Sie sie auch als ps- und svg-Dateien ausgeben.

Alle oben genannten Tools sind in das Systemd-Analyse-Tool integriert, das standardmäßig mindestens in Archlinux mit Systemd ausgeliefert wird. Ich denke, es gibt auch Projekte von Drittanbietern, die sich damit befassen.

IBr
quelle
Vielen Dank für Ihre Antwort, die sich jedoch nicht mit den Fragen befasst und nur Teile meiner Frage wiederholt (ich erwähnte, dass mir eine Möglichkeit bekannt ist, wie dies durch Analysieren der Systemd-Statusdaten geschehen kann). Daher stellt sich die Frage, wie ein pstree-ähnlicher Baum der Startsequenz erstellt werden kann, nachdem alle Abhängigkeiten gelöst wurden (z. B. nach dem Start). Die kritische Kette ist fast vollständig (obwohl es sich um einen Bottom-Up-Baum handelt), listet jedoch nicht alle gestarteten Einheiten auf. Was wird in der Frage gestellt: Ein Baum, der jede einzelne Einheit auflistet, die bis zu einem bestimmten Zeitpunkt ausgeführt wurde (z. B. das Ziel multi-user.target).
Galaxy
4
systemd-analyze plot > something.svgist voll drei der Ausführung mit Zielen (es ist am nächsten, was Sie wollen). systemd-analyse dot ist ein vollständiger Graph der Abhängigkeiten (es ist die korrekteste Darstellung). Sind das nicht was du willst? In der Handlung einfach Ziel finden und sehen, was es zu laufen braucht. Dieselben Abhängigkeiten werden im Diagramm genau aufgelistet, wenn ein Diagrammanalyse-Toolkit zu häufig gestartet und ein Diagrammpunkt ausgewählt wird, für den Abhängigkeiten angezeigt werden sollen (das Punkt-Tool verfügt über mehr Einstellungen). Siehe Manpage: freedesktop.org/software/systemd/man/systemd-analyze.html --order and similar
IBr
1
Von der Manpage: Hier werden alle Abhängigkeiten einer Einheit dargestellt, deren Name mit "avahi-daemon" beginnt. $ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg $ eog avahi.svgHier werden die Abhängigkeiten zwischen allen bekannten systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg $ eog targets.svg
Zieleinheiten dargestellt
1
IBr, aber das ist in der Textkonsole leider unbrauchbar. Ich weiß die Zeit, die Sie für die Antwort aufgewendet haben, sehr zu schätzen (und es ist richtig, wenn Sie einige Daten analysieren möchten), aber die ursprüngliche Frage wird nicht beantwortet, sodass ich sie akzeptieren kann. Es tut uns leid.
Galaxy
1
OK, kein Problem. Ich liebe Kommandozeilen-Tools selbst :)
IBr
13

Möglicherweise wird Ihre Frage noch nicht vollständig beantwortet, aber Sie können es mit der --fuzzOption versuchen

systemd-analyze critical-chain --fuzz 1h

Hinweis : Sie können auch Einheit angeben s ihre sehen kritisch-Kette , so dass Sie auf die nicht darauf beschränkt sind multi-user.target

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

Hoffe das hilft

Ludovic Ronsin
quelle
12

Ich bin nicht sicher, ob ich die Frage richtig verstehe, aber mit den folgenden Befehlen sind Baumvisualisierungen verfügbar:

sudo systemctl status

Und auch :

sudo systemctl list-dependencies 

Hoffe das hilft :)

Es kann auch für andere Zwecke nützlich sein, einen Baum der Ordner systemctl symlinks zu erstellen:

tree /etc/systemd/system

Es war wirklich nützlich, alte / fehlerhafte Einheiten herauszufinden, die meinen Systemstart verlangsamten, und sie anschließend mit dem systemctl disableBefehl zu deaktivieren .

BEARBEITEN

Das heißt, ich stimme dem OP wirklich zu, dass diese grundlegende Funktionalität über Befehlszeilen-Tools und nicht über ein grafisches Tool bereitgestellt werden sollte. Was ist, wenn Sie X nicht starten können? Wie gehst du dann mit deiner svg-Datei um?

Eigentlich gibt es einen Weg. Wenn Sie scp(ssh tool) nicht verwenden können , um Ihre Datei auf einem anderen Computer abzurufen, fbikönnte dies tatsächlich hilfreich sein :)

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

Hat in meinen TTYs gearbeitet. Navigieren Sie einfach mit den Pfeilen im Bild. Es gibt Zoomoptionen, um sie aufzulisten fbi -h.

Ich hoffe wieder, das hilft. Es ist in Archlinux- und Ubuntu-Repos verfügbar.

EDIT 2:

fbifunktioniert nicht über ssh Sie können X-Weiterleitungen wie folgt ausführen ssh -Y user@server, benötigen jedoch einen X-Server, der auf Ihrem Remote-Server ausgeführt wird.

Die beste Wette ist hier zu verwenden sshfs. Es funktioniert sehr gut im Userspace, zum Beispiel mit Nautilus. Es gibt eine kleine Konfiguration, siehe:

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
Joel.O
quelle
Die Frage betrifft den Ausführungsbaum für alle aktivierten Einheiten, die systemd nach der Abhängigkeitsauflösung durchlaufen hat. Diese Antwort ist also ein Fehlschlag.
Galaxy
Vielleicht ist Ihre Frage für eine Funktionsanfrage gut geeignet? Klar würde es helfen. Wie auch immer, ich habe diese Antwort gepostet, nachdem ich über Ihre Frage gestolpert war, weil sie irgendwie einer anderen Frage ähnelte, für die ich einige Informationen benötigte, und ich hatte das Gefühl, dass einige grundlegende Beispiele fehlten (wie die Dinge, die Sie ausprobiert haben und die nicht funktionierten - die wirklich funktioniert hätten) half zu klären), vor allem für Leute wie mich, die Probleme haben, nachdem sie System V init und ihre handliche rc.conf-Datei verloren haben. Entschuldigung, meine Antwort passte nicht. Keine Ablehnung wert.
Joel.O
Bearbeitet mit einer Problemumgehung für Ihr Problem. Hoffe es hilft wieder.
Joel.O
Ich konnte fbi über ssh auf meinem Server nicht verwenden. Funktioniert aber sshfsnoch besser. Siehe
BEARBEITEN