web-dev-qa-db-fra.com

Existe-t-il un moyen de voir l'arbre d'exécution de systemd?

Ce que je veux dire sous la question est: existe-t-il un moyen de vider la liste ordonnée (comme le fait pstree pour les processus) pour voir comment systemd a exécuté l'ensemble d'unités fourni, c'est-à-dire l'arborescence après la résolution des dépendances et les tâches ont été mises en file d'attente pour l'exécution ? Je sais que vous pouvez le faire en analysant les données d'état de systemd, mais existe-t-il un moyen rapide de voir un tel arbre? Cela aiderait beaucoup dans l'enquête sur les défaillances (par exemple, si vous voyez que le processus de démarrage était bloqué sur une unité, vous seriez en mesure de déterminer l'emplacement approximatif de votre enquête plus approfondie.

67
galaxy

systemd-analyze est votre ami. Par exemple systemd-analyze critical-chain affiche l'arbre de blocage des démons. La mienne par exemple:

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, par exemple, tient essentiellement le démarrage complet.

Si vous voulez avoir une vue plus détaillée, vous pouvez rendre la chaîne d'exécution entière dans un fichier svg. systemd-analyze plot > something.svg affiche toute la chaîne (120+ modules) sous forme de barres de progression vers un fichier svg haute résolution qui affiche les états, qui sont bloqués et d'autres problèmes.

Enfin, vous avez systemd-analyze dot outil qui génère un fichier de points qui génère une hiérarchie entière: systemd-analyze dot | dot -Tpng -o stuff.png avec l'outil point, vous pouvez également le produire sous forme de fichiers ps et svg.

Tous les outils ci-dessus sont intégrés dans l'outil d'analyse systemd qui est fourni par défaut avec systemd dans archlinux au moins. Je pense qu'il y a aussi des projets de tiers traitant de cela.

79
IBr

Je ne suis pas sûr de bien comprendre la question, mais des visualisations arborescentes sont disponibles avec les commandes suivantes:

Sudo systemctl status

Et aussi :

Sudo systemctl list-dependencies 

J'espère que cela t'aides :)

En outre, il peut être utile à d'autres fins de créer une arborescence des dossiers de liens symboliques systemctl:

tree /etc/systemd/system

Il était en fait très utile de comprendre les anciennes unités/buggy qui ralentissaient le démarrage de mon système, pour les désactiver ensuite en utilisant le systemctl disable commande.

ÉDITER

Cela dit, je suis vraiment d'accord avec l'OP que cette fonctionnalité de base devrait être fournie via des outils de ligne de commande, et non un outil graphique ... Et si vous ne pouvez pas démarrer X? Comment gérez-vous votre fichier svg alors?

En fait, il existe un moyen. Si vous ne pouvez pas utiliser scp (outil ssh) pour récupérer votre fichier sur un autre ordinateur, fbi pourrait en fait vous aider :)

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

A travaillé dans mes ATS. Naviguez simplement à l'intérieur de l'image avec des flèches. Il existe des options de zoom, pour lister faire fbi -h.

Encore une fois, j'espère que cela vous aidera. Il est disponible dans les dépôts Archlinux et Ubuntu.

EDIT 2:

fbi ne fonctionne pas sur ssh. Vous pouvez faire un transfert X comme ceci ssh -Y user@server, mais vous avez besoin d'un serveur X fonctionnant sur votre serveur distant.

Le meilleur pari ici est d'utiliser sshfs. Cela fonctionne très bien dans l'espace utilisateur, par exemple avec nautilus. Il y a une petite configuration à faire, voir:

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
18
Joel.O

Peut ne pas encore répondre complètement à votre question, mais essayez avec --fuzz option

systemd-analyze critical-chain --fuzz 1h

Notez que vous pouvez également spécifier l'unité s pour voir leur chaîne critique , donc vous n'êtes pas limité à la multi-user.target

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

J'espère que cela t'aides

14
Ludovic Ronsin