GNU/Linux >> Znalost Linux >  >> Linux

Obecná metodika pro ladění cyklů objednávání v Systemd?

Jsem si vědom následujícího vlákna a údajně i odpovědi na něj. Až na to, že odpověď není odpovědí v obecném smyslu. Říká, jaký byl problém v jednom konkrétním případě, ale ne obecně.

Moje otázka zní:existuje způsob, jak odladit cykly řazení v obecném způsob? Např.:existuje příkaz, který popíše cyklus a co spojuje jednu jednotku s druhou?

Například mám následující v journalctl -b (neberte prosím datum v úvahu, můj systém nemá RTC, se kterým by se čas synchronizoval):

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

kde cvol.service (ta, která byla představena a která přerušuje cyklus) je:

[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

Podle journalctl cvol.service chce basic.service, až na to, že nechce, alespoň ne zjevně. Existuje příkaz, který by ukázal, odkud je tento odkaz odvozen? A obecně, existuje příkaz, který by našel cykly a ukázal, odkud každý odkaz v cyklu pochází?

Přijatá odpověď:

Cyklus můžete vizualizovat pomocí příkazů systemd-analyze verify , systemd-analyze dot a dot GraphViz nástroj:

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

Měli byste vidět něco takového:

Zde můžete vidět cyklus:c.service->b.service->a.service->c.service

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

Odkazy:

  • systemd-analyze(1)
  • tečka(1)
Související:Php:gc_collect_cycles — Vynutí shromažďování všech existujících cyklů odpadků
Linux
  1. Přidání nové služby do Linux systemd

  2. Jak ladit Bash skript?

  3. Jak ladit proces spouštění systemd v CentOS/RHEL 7 a 8

  1. Jak zastavit službu systemd

  2. Startovací skript postgresql Systemd

  3. pomocí časovačů systemd místo cronu

  1. Ladění Linuxu pomocí ProcDump

  2. Použijte systemd časovače místo cronjobů

  3. Pochopení systemd při startu na Linuxu