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.
Réponses
Trop de publicités?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.
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
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