GNU/Linux >> Tutoriales Linux >  >> Linux

¿Metodología genérica para depurar ciclos de pedidos en Systemd?

Soy consciente de seguir el hilo y supuestamente una respuesta. Excepto que una respuesta no es una respuesta en sentido genérico. Dice cuál era el problema en un caso particular, pero no en general.

Mi pregunta es:¿hay alguna forma de depurar los ciclos de pedidos en un genérico? ¿camino? Por ejemplo:¿hay un comando que describa el ciclo y qué vincula una unidad con otra?

Por ejemplo, tengo seguimiento en journalctl -b (ignore la fecha, mi sistema no tiene RTC para sincronizar la hora):

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

donde cvol.service (el que se introdujo y que rompe el ciclo) es:

[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

Según journalctl, cvol.service quiere basic.service, excepto que no lo hace, al menos no obviamente. ¿Hay un comando que demuestre de dónde se deriva este enlace? Y, en general, ¿hay un comando que encuentre los ciclos y muestre dónde se origina cada enlace en el ciclo?

Respuesta aceptada:

Puedes visualizar el ciclo con los comandos systemd-analyze verify , systemd-analyze dot y GraphViz dot herramienta:

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

Deberías ver algo como esto:

Aquí puedes ver el ciclo:c.service->b.service->a.service->c.service

Color legend: 
    black     = Requires
    dark blue = Requisite
    dark grey = Wants
    red       = Conflicts
    green     = After

Enlaces:

  • systemd-análisis(1)
  • punto(1)
Relacionado:Php:gc_collect_cycles — Fuerza la recolección de cualquier ciclo de basura existente
Linux
  1. Depurar Linux usando ProcDump

  2. Use temporizadores systemd en lugar de cronjobs

  3. Cómo depurar el proceso de arranque de systemd en CentOS/RHEL 7 y 8

  4. Cómo depurar el proceso de arranque de systemd en CentOS/RHEL 7 y 8

  5. Cómo detener el servicio systemd

Aprendiendo a amar systemd

Comandos Systemctl para administrar el servicio Systemd

Administrar cgroups con systemd

¿Cómo depurar un script Bash?

Cómo borrar los registros de diario de Systemd

SystemD - ¿Para qué se utiliza SystemD?