Soy consciente del siguiente hilo y supuestamente una respuesta al mismo . Excepto que una respuesta no es una respuesta en sentido genérico. Indica cuál fue el problema en un caso particular, pero no en general.
Mi pregunta es: ¿hay alguna forma de depurar los ciclos de pedidos de forma genérica ? Por ejemplo: ¿hay un comando que describa el ciclo y qué vincula una unidad con otra?
Por ejemplo, he seguido 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 algún 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 del ciclo?
systemd-analyze verify UNIT
para verificar la corrección de la unidad. Detrás de escena, este comando crea una instancia virtual del sistema e intenta cargar la UNIDAD dada como la transacción inicial (como si fueradefault.target
). Esto no revelará ninguna información nueva (en comparación con los registros), pero al menos no tendrá que reiniciar con la unidad habilitada para ver si falla.Puede visualizar el ciclo con los comandos
systemd-analyze verify
,systemd-analyze dot
y la GraphVizdot
herramienta:Debería ver algo como esto:
Aquí puedes ver el ciclo:
c.service->b.service->a.service->c.service
Campo de golf:
fuente
systemd-analyze verify
no existe aquí en una instalación de debian 8.systemd-analyze verify
disponible desdev216
. tratarsystemd-verify
. ¿Existe?systemd-analyze verify default.target
por sí solo hace un trabajo decente al mostrar el ciclo ...Paso 1: ejecuta el comando de verificación para default.target
Paso 2: observe qué servicio o destino se menciona en el mensaje "systemd Romper el ciclo de pedidos eliminando el trabajo" y visualice su lista completa de dependencias
Paso 3: mira los grupos "después" y "antes" dentro del servicio o archivo de destino generalmente definido en
y encuentre que los servicios u objetivos bien conocidos son secuenciales pero están en orden de salida para este.
ejemplo:
es generalmente el mercado "después"
pero "antes"
dicha dependencia podría observarse fácilmente llamando
sin embargo si el archivo
contener líneas como:
o
o ambos simultáneamente, significa que dbus.service está definido como saliente y está causando un ciclo interminable systemd.
la cura es simple: cambie la palabra "Después" a "Antes" y viceversa si es necesario.
fuente