Я в курсе следующей ветки и якобы ответ на нее . За исключением ответа не является ответом в общем смысле. Это говорит о том, что проблема была в одном конкретном случае, но не в целом.
Мой вопрос: есть ли способ отладки циклов заказа в общем виде? Например: есть ли команда, которая будет описывать цикл и что связывает один блок с другим?
Например, у меня есть следующее journalctl -b
(пожалуйста, не обращайте внимания на дату, в моей системе нет времени RTC для синхронизации времени):
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
где cvol.service (тот, который был введен, и который нарушает цикл):
[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
Согласно journalctl, cvol.service хочет basic.service, за исключением того, что он этого не делает, по крайней мере, очевидно. Есть ли команда, которая продемонстрировала бы, откуда взята эта ссылка? И вообще, есть ли команда, которая найдет циклы и покажет, где происходит каждая ссылка в цикле?
systemd-analyze verify UNIT
чтобы проверить правильность устройства. За кулисами эта команда создает виртуальный экземпляр systemd и пытается загрузить данный UNIT в качестве начальной транзакции (как если бы она былаdefault.target
). Это не откроет никакой новой информации (по сравнению с журналами), но, по крайней мере, вам не придется перезагружаться с включенным устройством, чтобы увидеть, выйдет ли оно из строя.Вы можете представить себе цикл с командами
systemd-analyze verify
,systemd-analyze dot
и GraphVizdot
инструмент:Вы должны увидеть что-то вроде этого:
Здесь вы можете увидеть цикл:
c.service->b.service->a.service->c.service
Ссылки:
источник
systemd-analyze verify
не существует здесь при установке Debian 8systemd-analyze verify
доступно с тех порv216
. попробуйsystemd-verify
. Это существует?systemd-analyze verify default.target
сам по себе делает достойную работу в показе цикла ...Шаг 1: запустить команду проверки для default.target
Шаг 2: посмотрите, какая служба или цель упоминаются в сообщении «systemd Прерывание цикла упорядочения путем удаления задания», и отобразите полный список зависимостей.
Шаг 3: посмотрите на группы «после» и «до» внутри файла службы или целевого файла, обычно определяемого в
и найдите службы или цели, которые, как известно, являются последовательными, но в исходящем порядке для этой.
пример:
обычно рынок "после"
но "до"
такую зависимость можно легко увидеть, позвонив
Однако если файл
содержат строки вроде:
или
или оба одновременно означает, что dbus.service определен как исходящий и вызывает бесконечный цикл systemd.
лечение просто - изменить слово «После» к «До» и наоборот , если это необходимо.
источник