Чи є спосіб побачити дерево виконання systemd?


63

Що я маю на увазі під питанням: чи є спосіб скинути впорядкований список (як pstree робить для процесів), щоб побачити, як систематизовано виконаний наданий набір одиниць, тобто дерево після усунення залежностей і завдання в чергу для виконання ? Я знаю, що ви можете це зробити, проаналізувавши дані про стан системи, але чи є швидкий спосіб побачити таке дерево? Це дуже допоможе в розслідуванні несправностей (наприклад, якщо ви побачите, що процес завантаження застряг на якомусь блоці, ви зможете точно визначити приблизне місце для вашого більш глибокого розслідування.


Я створив інструмент візуалізації для systemd. Ви можете перевірити та спробувати цей інструмент у github.com/ywiyogo/systemd-visual
Yongkie

Відповіді:


71

systemd-analyzeтвій друг. Наприклад, systemd-analyze critical-chainвиводить блокування дерева демонів. Наприклад, шахта:

graphical.target @20.211s
└─multi-user.target @20.211s
  └─nginx.service @19.348s +862ms
    └─network.target @19.347s
      └─NetworkManager.service @10.315s +9.031s
        └─basic.target @10.312s
          └─timers.target @10.311s
            └─systemd-tmpfiles-clean.timer @10.311s
              └─sysinit.target @10.295s
                └─systemd-update-utmp.service @10.167s +127ms
                  └─systemd-tmpfiles-setup.service @10.124s +41ms
                    └─local-fs.target @10.097s
                      └─home-entd-Downloads.mount @10.093s +2ms
                        └─home.mount @9.326s +672ms
                          └─systemd-fsck@dev-sda6.service @8.472s +696ms
                            └─dev-sda6.device @8.471s

Приклад NetworkManager, в основному, тримає весь завантажувач.

Якщо ви хочете отримати більш детальний вигляд, ви можете вивести весь ланцюжок виконання у SVG-файл. systemd-analyze plot > something.svgвиводить всю ланцюжок (120+ модулів) у вигляді рядків прогресу до SVG-файлу з високою роздільною здатністю, який показує стани, які заблоковані та інші проблеми.

Нарешті, у вас є systemd-analyze dotінструмент, який виводить точковий файл, який видає всю ієрархію: за systemd-analyze dot | dot -Tpng -o stuff.png допомогою інструменту крапок ви можете виводити його також у форматі ps та svg.

Усі вищезазначені інструменти є вбудованим інструментом аналізу системного аналізу, який за замовчуванням принаймні є systemd в archlinux. Я думаю, що є і проекти сторонніх організацій, які займаються цим.


Дякую за вашу відповідь, однак він не стосується питань, а просто повторює частини мого запитання (я зазначив, що знаю спосіб, як це зробити, аналізуючи дані про стан системи). Звідси виникає питання, як отримати дерево, подібне до pstree, послідовності завантаження після вирішення всіх залежностей (наприклад, після завантаження). Критична ланцюг є майже в ній (незважаючи на те, що це дерево знизу вгору), але не перераховано всі запущені одиниці. Що задається у запитанні: дерево, яке перераховує кожну одиницю, яка була виконана до певного моменту (наприклад, потрапляння на багатокористувацький ціль).
галактика

4
systemd-analyze plot > something.svgповна три виконання з цілями (це найближче те, що ви хочете). точка-systemd-аналіз - це повний графік залежностей (це найбільш правильне подання). Це не те, чого ти хочеш? У сюжеті просто знайдіть ціль і подивіться, що вона також повинна бути запущена. Ті самі залежності є саме переліченим графіком, якщо він значно запустить якийсь інструментарій аналізу графіків і вибере точку графа, для якої ви хочете побачити залежності (інструмент крапки має більше налаштувань). Див. Сторінку людини: freedesktop.org/software/systemd/man/systemd-analyze.html - замовлення та подібне
IBr

1
На сторінці man: Цей графік відображає всі залежності будь-якої одиниці, назва якої починається з «avahi-daemon.»: $ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg $ eog avahi.svgЦе описує залежності між усіма відомими цільовими одиницями:systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg $ eog targets.svg
IBr

1
IBr, але це, на жаль, не можна використовувати в текстовій консолі. Я дуже ціную час, який ви витратили на відповідь (і це правильно, якщо ви хочете отримати деякі дані для аналізу), але це не стосується оригінального питання, тому я можу його прийняти. Вибачте.
галактика

1
Без проблем. Сам я люблю інструменти командного рядка :)
IBr

13

Може все-таки не повністю відповісти на ваше запитання, але спробуйте з --fuzzваріантом

systemd-analyze critical-chain --fuzz 1h

Зауважте, ви також можете вказати одиницю s, щоб побачити їх критичну ланцюг , тому ви не обмежуєтесь багатокористувальною ціллю

systemd-analyze critical-chain network.target local-fs.target

Сподіваюся, це допомагає


12

Не впевнений, що я правильно розумію питання, але доступні візуалізації дерев із такими командами:

sudo systemctl status

І також :

sudo systemctl list-dependencies 

Сподіваюся, це допомагає :)

Крім того, це може бути корисно для інших цілей, щоб створити дерево системи systemctl, що посилається на папки:

tree /etc/systemd/system

Насправді було дуже корисно з'ясувати старі / помилкові блоки, які сповільнювали запуск моєї системи, щоб потім відключити їх за допомогою systemctl disableкоманди.

EDIT

Це сказало, що я дійсно згоден з ОП, що цей основний функціонал повинен надаватися через інструменти командного рядка, а не графічний інструмент ... Що робити, якщо ви не можете запустити X? Як тоді ви маєте справу зі своїм файлом svg?

Власне, спосіб є. Якщо ви не можете використовувати scp(інструмент ssh) для отримання файлу на іншому комп'ютері, це fbiможе допомогти вам :)

sudo systemd-analyze plot > /home/user/startup.svg
fbi /home/user/startup.svg

Працював у моїх TTY. Просто перейдіть всередину картинки зі стрілками. Є список варіантів масштабування, щоб перелічити fbi -h.

Знову сподіваюся, що це допомагає. Він доступний в Archlinux та Ubuntu repos.

EDIT 2:

fbiне працює над ssh. Ви можете зробити переадресацію X так ssh -Y user@server, але вам потрібен X-сервер, який працює на віддаленому сервері.

Найкраще тут скористатися sshfs. Це працює ВЕЛИКО в просторі користувачів, наприклад, з nautilus. Щоб зробити невелику конфігурацію, див.

sudo vim /etc/fuse.conf #type a, uncomment the user_allow_other line and ESC :wq
sudo mkdir /mnt/yourmountingdir
sudo chown user:user /mnt/yourmountingdir
sshfs user@remotemachine.com:/home/user /mnt/yourmountingdir/ -o allow_other #Asks for host trusting and password
sudo fusermount -u /mnt/yourmountingdir/ #To disconnect and unmount

Питання про дерево виконання для всіх активованих одиниць, які систематизовано, пройшли після вирішення залежності. Тож ця відповідь є промахом.
галактика

Можливо, ваше запитання добре відповідає запиту на функцію? Звичайно, це допоможе. У будь-якому випадку я опублікував цю відповідь після спотикання на ваше запитання, тому що це якимось чином нагадувало інше запитання, мені потрібна була деяка інформація, і я відчував, що деяких основних прикладів не вистачає (як те, що ви спробували і не працювали - це справді було б допоміг уточнити), особливо для таких людей, як я, що борються після втрати системи System V init та їхнього зручного файлу rc.conf. Вибачте, моя відповідь не підійшла. Не варто, однак.
Joel.O

Відредаговано з вирішенням вашої проблеми. Сподіваюсь, це знову допоможе.
Joel.O

Мені не вдалося використовувати fbi over ssh на своєму сервері. Але sshfsпрацює ще краще. Дивіться EDIT 2.
Joel.O
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.