Jestem świadomy podążania za wątkiem i rzekomo odpowiedzi na to . Tyle że odpowiedź nie jest odpowiedzią w sensie ogólnym. Mówi o tym, jaki był problem w jednym konkretnym przypadku, ale nie ogólnie.
Moje pytanie brzmi: czy istnieje sposób na ogólne debugowanie cykli zamawiania ? Np .: czy istnieje polecenie opisujące cykl i łączące jedną jednostkę z drugą?
Na przykład mam następujące journalctl -b
(proszę zignorować datę, mój system nie ma RTC do synchronizacji czasu):
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
gdzie cvol.service (ten, który został wprowadzony i który przerywa cykl) to:
[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
Według Journalctl, cvol.service chce basic.service, poza tym, że nie, przynajmniej nie w sposób oczywisty. Czy istnieje polecenie, które pokazuje, skąd pochodzi ten link? Ogólnie rzecz biorąc, czy istnieje polecenie, które odnajdzie cykle i pokaże, skąd pochodzi każde łącze w cyklu?
systemd-analyze verify UNIT
do sprawdzenia poprawności urządzenia. Za kulisami to polecenie tworzy wirtualną instancję systemd i próbuje załadować podaną JEDNOSTKĘ jako transakcję początkową (jakby byładefault.target
). Nie ujawni to żadnych nowych informacji (w porównaniu do dzienników), ale przynajmniej nie będziesz musiał restartować się z włączoną jednostką, aby sprawdzić, czy się nie powiedzie.Można wyobrazić sobie cykl z poleceniami
systemd-analyze verify
,systemd-analyze dot
a Graphvizdot
narzędzia:Powinieneś zobaczyć coś takiego:
Tutaj możesz zobaczyć cykl:
c.service->b.service->a.service->c.service
Spinki do mankietów:
źródło
systemd-analyze verify
nie istnieje tutaj w instalacji Debian 8.systemd-analyze verify
dostępne odv216
. spróbujsystemd-verify
. Czy to istnieje?systemd-analyze verify default.target
samodzielnie robi porządną robotę, pokazując pętlę ...krok 1: uruchom polecenie weryfikacji dla default.target
krok 2: obserwuj usługę lub cel wymieniony w komunikacie „systemd Przerwanie cyklu zamawiania przez usunięcie zadania” i wyświetl jego pełną listę zależności
krok 3: spójrz na grupy „za” i „przed” w pliku usługi lub pliku docelowym, zwykle zdefiniowanym w
i znajdź usługi lub cele, o których wiadomo, że są sekwencyjne, ale są w kolejności wychodzącej dla tego.
przykład:
jest zwykle rynkowy „po”
ale „przed”
taką zależność można łatwo zaobserwować dzwoniąc
jednak jeśli plik
zawierają wiersze takie jak:
lub
lub oba jednocześnie, oznacza, że usługa dbus.service jest zdefiniowana jako wychodząca i powoduje to systemowy niekończący się cykl.
wyleczenie jest prosty - zmiana słowa „po” do „przed” i vice versa, jeśli to konieczne.
źródło