111 votes

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

Ce que je veux dire par cette question est : y a-t-il un moyen de vider la liste ordonnée (comme pstree le fait pour les processus) pour voir comment systemd a exécuté l'ensemble des unités fournies, c'est-à-dire l'arbre après que les dépendances aient été résolues et que les travaux aient été mis 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 à enquêter 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 localiser l'emplacement approximatif pour votre enquête approfondie.

138voto

IBr Points 1306

systemd-analyze est votre ami. Par exemple systemd-analyze critical-chain arbre de blocage des sorties des démons. Le mien 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
                          systemd-fsck@dev-sda6.service @8.472s +696ms
                            dev-sda6.device @8.471s

Le NetworkManager dans l'exemple tient essentiellement tout le démarrage.

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 produit l'ensemble de la chaîne (120+ modules) sous forme de barres de progression dans un fichier svg haute résolution qui montre les états, qui sont bloqués et d'autres problèmes.

Enfin, vous avez systemd-analyze dot outil qui produit un fichier point qui produit toute la hiérarchie : systemd-analyze dot | dot -Tpng -o stuff.png Avec l'outil Dot, vous pouvez également le convertir en fichiers ps et svg.

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

35voto

Joel.O Points 419

Je ne suis pas sûr d'avoir bien compris la question, mais il existe des visualisations d'arbres disponibles avec les commandes suivantes :

sudo systemctl status

Et aussi :

sudo systemctl list-dependencies 

J'espère que cela vous aidera :)

De plus, il pourrait être utile à d'autres fins de construire un arbre des dossiers de symlinks de systemctl :

tree /etc/systemd/system

Il s'est avéré très utile pour identifier les unités anciennes / boguées qui ralentissaient le démarrage de mon système, pour les désactiver ensuite à l'aide de la commande systemctl disable commandement.

EDIT

Cela dit, je suis vraiment d'accord avec le PO pour dire que cette fonctionnalité de base devrait être donnée par des outils en ligne de commande, et non par un outil graphique... Et si vous ne pouvez pas démarrer X ? Comment gérez-vous votre fichier svg alors ?

En fait, il y a un moyen. Si vous ne pouvez pas utiliser scp (outil ssh) pour aller chercher 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 a marché dans mes ATS. Il suffit de naviguer à l'intérieur de l'image avec les flèches. Il y a des options de zoom, à énumérer font 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 une redirection X comme ceci ssh -Y user@server mais vous devez faire tourner un serveur X sur votre serveur distant.

Le mieux est d'utiliser sshfs . Cela fonctionne très bien en espace utilisateur, par exemple avec nautilus. Il y a un peu de 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 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

20voto

Ludovic Ronsin Points 241

Cela ne répond peut-être pas entièrement à 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 Vous n'êtes donc pas limité à la multi-user.target

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

J'espère que cela vous aidera

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X