Je suis au courant du fil suivant et soi-disant une réponse à celui-ci. Sauf qu'une réponse n'est pas une réponse au sens générique. Il indique quel était le problème dans un cas particulier, mais pas en général.
Ma question est :existe-t-il un moyen de déboguer les cycles de commande dans un générique chemin? Ex. :y a-t-il une commande qui va décrire le cycle et ce qui relie une unité à une autre ?
Par exemple, j'ai suivi dans journalctl -b
(veuillez ne pas tenir compte de la date, mon système n'a pas de RTC pour synchroniser l'heure) :
Jan 01 00:00:07 host0 systemd[1]: Found ordering cycle on sysinit.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on local-fs.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on cvol.service/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on basic.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on sockets.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on dbus.socket/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on sysinit.target/start
Jan 01 00:00:07 host0 systemd[1]: Breaking ordering cycle by deleting job local-fs.target/start
Jan 01 00:00:07 host0 systemd[1]: Job local-fs.target/start deleted to break ordering cycle starting with sysinit.target/start
où cvol.service (celui qui a été introduit et qui rompt le cycle) est :
[Unit]
Description=Mount Crypto Volume
After=boot.mount
Before=local-fs.target
[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/bin/cryptsetup open /dev/*** cvol --key-file /boot/***
[Install]
WantedBy=home.mount
WantedBy=root.mount
WantedBy=usr-local.mount
Selon journalctl, cvol.service veut basic.service, sauf que ce n'est pas le cas, du moins pas évidemment. Existe-t-il une commande qui démontrerait d'où provient ce lien ? Et en général, y a-t-il une commande qui trouverait les cycles et montrerait d'où vient chaque lien du cycle ?
Réponse acceptée :
Vous pouvez visualiser le cycle avec les commandes systemd-analyze verify
, systemd-analyze dot
et le dot
de GraphViz outil :
systemd-analyze verify default.target |&
perl -lne 'print $1 if m{Found.*?ons+([^/]+)}' |
xargs --no-run-if-empty systemd-analyze dot |
dot -Tsvg >cycle.svg
Vous devriez voir quelque chose comme ceci :
Ici vous pouvez voir le cycle :c.service->b.service->a.service->c.service
Color legend:
black = Requires
dark blue = Requisite
dark grey = Wants
red = Conflicts
green = After
Liens :
- systemd-analyze(1)
- point(1)