C'è un modo per vedere l'albero di esecuzione di systemd?


63

Ciò che intendo sotto la domanda è: c'è un modo per scaricare l'elenco ordinato (come fa pstree per i processi) per vedere come systemd ha eseguito il set di unità fornito, ovvero l'albero dopo che le dipendenze sono state risolte e i lavori sono stati messi in coda per l'esecuzione ? So che puoi farlo analizzando i dati di stato del sistema, ma c'è un modo rapido per vedere un tale albero? Sarebbe di grande aiuto nelle indagini sugli errori (ad es. Se vedi che il processo di avvio è stato bloccato su alcune unità, sarai in grado di individuare la posizione approssimativa per le tue indagini più approfondite.


Ho creato uno strumento di visualizzazione per systemd. Puoi controllare e provare lo strumento in github.com/ywiyogo/systemd-visual
Yongkie

Risposte:


71

systemd-analyzeÈ tuo amico. Ad esempio, systemd-analyze critical-chainoutput che bloccano l'albero dei demoni. Il mio ad esempio:

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, ad esempio, tiene sostanzialmente l'intero avvio.

Se vuoi avere una vista più dettagliata puoi renderizzare l'intera catena di esecuzione in un file svg. systemd-analyze plot > something.svggenera l'intera catena (oltre 120 moduli) come barre di avanzamento in un file svg ad alta risoluzione che mostra gli stati, che sono bloccati e altri problemi.

Finalmente hai uno systemd-analyze dotstrumento che genera file dot che genera un'intera gerarchia: systemd-analyze dot | dot -Tpng -o stuff.png con lo strumento punto puoi anche output come file ps e svg.

Tutti gli strumenti di cui sopra sono integrati nello strumento di analisi di systemd che viene fornito di default almeno con systemd in archlinux. Penso che ci siano anche alcuni progetti di terze parti.


Grazie per la tua risposta, tuttavia non affronta le domande e reitera solo alcune parti della mia domanda (ho detto che sono a conoscenza di un modo per farlo analizzando i dati di stato di systemd). Quindi la domanda è come ottenere un albero simile a pstree della sequenza di avvio dopo che tutte le dipendenze sono state risolte (ad es. Dopo l'avvio). La catena critica è quasi (nonostante sia un albero dal basso verso l'alto) ma non elenca tutte le unità iniziate. Cosa viene chiesto nella domanda: un albero che elenca ogni singola unità che è stata eseguita fino a un certo punto (ad esempio, colpendo il multi-user.target).
galassia,

4
systemd-analyze plot > something.svgsono tre completi di esecuzione con target (è il più vicino a quello che vuoi). systemd-analyse dot è il grafico completo delle dipendenze (è la rappresentazione più corretta). Non sono questi quelli che vuoi? Nella trama basta trovare il bersaglio e vedere di cosa ha bisogno anche per essere eseguito. Le stesse dipendenze sono rappresentate esattamente nel grafico, se si accende molto qualche toolkit di analisi del grafico e si seleziona il punto del grafico per il quale si desidera vedere le dipendenze (lo strumento punto ha più impostazioni). Vedi la pagina man: freedesktop.org/software/systemd/man/systemd-analyze.html --order e simili
IBr

1
Dalla pagina man: Traccia tutte le dipendenze di qualsiasi unità il cui nome inizia con "avahi-daemon".: Traccia $ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg $ eog avahi.svgle dipendenze tra tutte le unità bersaglio conosciute:systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg $ eog targets.svg
IBr

1
IBr, ma questo è inutilizzabile nella console di testo, sfortunatamente. Apprezzo molto il tempo che hai dedicato alla risposta (ed è corretto se vuoi ottenere alcuni dati da analizzare), ma non affronta la domanda originale, quindi posso accettarlo. Scusate.
galassia,

1
Ok nessun problema. Adoro gli strumenti da riga di comando :)
IBr

13

Potrebbe ancora non rispondere completamente alla tua domanda ma provare con l' --fuzzopzione

systemd-analyze critical-chain --fuzz 1h

Nota è anche possibile specificare unità s per vedere la loro critica a catena , in modo che non si è limitati alla multi-user.target

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

Spero che sia di aiuto


12

Non sono sicuro di aver compreso correttamente la domanda, ma ci sono visualizzazioni ad albero disponibili con i seguenti comandi:

sudo systemctl status

E anche :

sudo systemctl list-dependencies 

Spero che sia di aiuto :)

Inoltre, potrebbe essere utile per altri scopi costruire un albero delle cartelle dei link simbolici di systemctl:

tree /etc/systemd/system

In realtà è stato davvero utile capire unità vecchie / buggy che stavano rallentando l'avvio del mio sistema, per disabilitarle in seguito usando il systemctl disablecomando.

MODIFICARE

Detto questo, sono davvero d'accordo con l'OP che questa funzionalità di base dovrebbe essere fornita tramite strumenti da riga di comando e non uno strumento grafico ... E se non fosse possibile avviare X? Come gestisci il tuo file svg allora?

In realtà, c'è un modo. Se non puoi usare scp(strumento ssh) per recuperare il tuo file su un altro computer, fbipotresti davvero aiutarti :)

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

Ha lavorato nei miei TTY. Basta navigare all'interno dell'immagine con le frecce. Ci sono opzioni di zoom, per elencare fbi -h.

Ancora una volta spero che questo aiuti. È disponibile nei repository Archlinux e Ubuntu.

MODIFICA 2:

fbinon funziona su ssh. Puoi eseguire X forwarding in questo modo ssh -Y user@server, ma hai bisogno di un server X in esecuzione sul tuo server remoto.

La scommessa migliore qui è usare sshfs. Funziona perfettamente nello spazio utente, ad esempio con nautilus. C'è una piccola configurazione da fare, vedi:

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

La domanda riguarda l'albero di esecuzione per tutte le unità attivate che il sistema ha attraversato dopo la risoluzione delle dipendenze. Quindi questa risposta è una mancanza.
galaxy

Forse la tua domanda è adatta per una richiesta di funzionalità? Sicuro che sarebbe d'aiuto. Comunque, ho postato questa risposta dopo essermi imbattuto nella tua domanda perché in qualche modo assomigliava a un'altra domanda su cui avevo bisogno di alcune informazioni e sentivo che mancavano alcuni esempi di base (come le cose che hai provato e non ha funzionato, che avrebbe davvero ha contribuito a chiarire), specialmente per le persone come me che lottano dopo aver perso System V init e il loro utile file rc.conf. Mi dispiace che la mia risposta non sia adatta. Non vale la pena un voto negativo però.
Joel

Modificato con una soluzione alternativa al tuo problema. Spero che aiuti di nuovo.
Joel.O

Non sono riuscito a usare fbi su ssh sul mio server. Ma sshfsfunziona ancora meglio. Vedi EDIT 2.
Joel.O
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.