Vraag Is er een manier om de uitvoeringsboom van systemd te zien?


Wat ik bedoel onder de vraag is: is er een manier om de geordende lijst te dumpen (zoals pstree dat doet voor processen) om te zien hoe systemd de meegeleverde set eenheden uitvoerde, dat wil zeggen de boom nadat de afhankelijkheden waren opgelost en taken in de wachtrij stonden voor de uitvoering ? Ik weet dat je het kunt doen door gesystematiseerde toestandsgegevens te analyseren, maar is er een snelle manier om zo'n boom te zien? Het zou veel helpen bij het onderzoek naar fouten (bijvoorbeeld als je ziet dat het opstartproces op een bepaald apparaat is vastgelopen, zou je de geschatte locatie voor je diepere onderzoek kunnen vinden.


44
2017-08-02 10:10


oorsprong


Ik heb een visualisatietool voor systemd gemaakt. U kunt het hulpprogramma controleren en proberen github.com/ywiyogo/systemd-visual - Yongkie


antwoorden:


systemd-analyze is jouw vriend. Bijvoorbeeld systemd-analyze critical-chain uitgangen blokkeren boom van daemons. De mijne bijvoorbeeld:

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 in het voorbeeld houdt in feite de hele bootup vast.

Als u meer gedetailleerde weergave wilt, kunt u de volledige uitvoeringsketen in een svg-bestand weergeven. systemd-analyze plot > something.svg voert volledige keten (120+ modules) uit als voortgangsbalken naar high-res svg-bestand die toestanden tonen, die geblokkeerd zijn en nog andere problemen.

Eindelijk heb je systemd-analyze dot tool die een dot-bestand uitvoert met volledige hiërarchie: systemd-analyze dot | dot -Tpng -o stuff.png met puntgereedschap kunt u het ook uitvoeren als ps- en svg-bestanden.

Alle bovenstaande tools zijn ingebouwd in de systemd-analyse tool die standaard wordt geleverd met systemd in archlinux. Ik denk dat er ook projecten van derden zijn die hiermee omgaan.


54
2017-08-04 18:57



Bedankt voor uw antwoord, maar het behandelt de vragen niet en herhaalt slechts delen van mijn vraag (ik zei dat ik me bewust ben van een manier om dit te doen door de toestandsgegevens van systemd te analyseren). Daarom is de vraag hoe een pstree-achtige structuur van de opstartvolgorde te krijgen nadat alle afhankelijkheden zijn opgelost (bijvoorbeeld na het opstarten). De kritieke keten is bijna alles (ondanks dat het een bottom-up boom is) maar geeft niet alle gestarte eenheden weer. Wat wordt er in de vraag gesteld: een boom met elke afzonderlijke eenheid die tot op een bepaald punt is uitgevoerd (bijvoorbeeld het multi-user.target raken). - galaxy
systemd-analyze plot > something.svg is vol drie van uitvoering met doelen (het is het dichtst bij wat je wilt). systemd-analyse punt is een volledige grafiek van afhankelijkheden (het is de meest correcte weergave). Zijn dit niet wat je wilt? Zoek in het plot het doelwit op en kijk wat het ook moet doen. Dezelfde afhankelijkheden zijn exact weergegeven in de grafiek, als het een groot aantal toolkit voor grafiekanalyse oplost en een grafiekpunt selecteert waarvoor u afhankelijkheden wilt zien (het gereedschap Stempel heeft meer instellingen). Zie manpagina: freedesktop.org/software/systemd/man/systemd-analyze.html  --order en vergelijkbaar - IBr
From man page: Dit plot alle afhankelijkheden van elke eenheid waarvan de naam begint met "avahi-daemon.": $ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg  $ eog avahi.svg Dit plot de afhankelijkheden tussen alle bekende doeleenheden: systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg  $ eog targets.svg - IBr
IBr, maar dit is helaas onbruikbaar in de tekstconsole. Ik waardeer de tijd die je aan het antwoord hebt besteed enorm (en het is correct als je wat gegevens wilt analyseren), maar het behandelt de oorspronkelijke vraag niet, dus ik kan het accepteren. Sorry. - galaxy
OK, geen probleem. Ik hou zelf van command line tools :) - IBr


Kan je vraag nog steeds niet volledig beantwoorden, maar probeer het met --fuzz keuze

systemd-analyze critical-chain --fuzz 1h

Let op: u kunt ook een eenheid opgevens om hun te zien kritische ketens, dus je bent niet beperkt tot de multi-user.target

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

Ik hoop dat dit helpt


9
2017-10-22 23:30





Ik weet niet zeker of ik de vraag goed begrijp, maar er zijn boomvisualisaties beschikbaar met de volgende opdrachten:

sudo systemctl status

En ook :

sudo systemctl list-dependencies 

Ik hoop dat dit helpt :)

Het kan ook nuttig zijn voor andere doeleinden om een ​​structuur te bouwen van de systemctl-symlinks-mappen:

tree /etc/systemd/system

Het was eigenlijk heel handig om oude / buggy-eenheden te achterhalen die mijn systeem opstarten vertraagden, om ze achteraf uit te schakelen met behulp van de systemctl disable commando.

BEWERK

Dat gezegd hebbende, ben ik het echt eens met het OP dat deze basisfunctionaliteit moet worden gegeven via commandoregelhulpmiddelen en niet een grafisch hulpmiddel ... Wat als u X niet kunt starten? Hoe gaat u om met uw svg-bestand dan?

Eigenlijk is er een manier. Als je niet kunt gebruiken scp (ssh-tool) om je bestand op een andere computer op te halen, fbi kan je echt helpen :)

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

Werkte in mijn TTY's. Navigeer gewoon binnen de afbeelding met pijlen. Er zijn zoomopties om lijst te doen fbi -h.

Nogmaals, ik hoop dat dit helpt. Het is verkrijgbaar in Archlinux en Ubuntu repos.

EDIT 2:

fbi werkt niet via ssh. Je kunt X-forwarding op deze manier doen ssh -Y user@server, maar u hebt een X-server nodig die op uw externe server wordt uitgevoerd.

De beste gok hier is om te gebruiken sshfs. Het werkt GEWELDIG in de gebruikersruimte, bijvoorbeeld met nautilus. Er is een kleine configuratie om te doen, zie:

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

8
2018-02-13 13:02



De vraag gaat over de uitvoeringsboom voor alle geactiveerde eenheden die systemd werden doorlopen na de afhankelijkheidsresolutie. Dus dit antwoord is een misser. - galaxy
Misschien is uw vraag goed afgestemd op een functieverzoek? Natuurlijk zou het helpen. Hoe dan ook, ik plaatste dit antwoord nadat ik naar je vraag strompelde, omdat het op de een of andere manier leek op een andere vraag waarover ik wat informatie nodig had, en ik voelde dat er enkele elementaire voorbeelden ontbraken (zoals de dingen die je hebt geprobeerd en niet hebt gedaan - dat zou echt hebben geholpen om te verduidelijken), vooral voor mensen zoals ik die worstelden na het verlies van System V init en hun handige rc.conf-bestand. Sorry dat mijn antwoord niet klopte. Een downvote echter niet waard. - Joel.O
Bewerkt met een oplossing voor uw probleem. Ik hoop dat het weer helpt. - Joel.O
Ik kon fbi over ssh niet gebruiken op mijn server. Maar sshfs werkt nog beter. Zie EDIT 2. - Joel.O