Под вопросом я имею в виду: есть ли способ сбросить упорядоченный список (например, pstree для процессов), чтобы увидеть, как systemd выполнил предоставленный набор модулей, то есть дерево после того, как зависимости были разрешены и задания были поставлены в очередь для выполнения ? Я знаю, что вы можете сделать это, проанализировав данные состояния systemd, но есть ли быстрый способ увидеть такое дерево? Это очень поможет в расследовании сбоев (например, если вы увидите, что процесс загрузки завис на каком-то устройстве, вы сможете точно определить приблизительное местоположение для более глубокого исследования.
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-analysis, который по умолчанию поставляется с systemd как минимум в Archlinux. Я думаю, что есть некоторые сторонние проекты, которые занимаются этим.
Не уверен, что я правильно понимаю вопрос, но есть визуализации дерева, доступные с помощью следующих команд:
sudo systemctl status
А также :
sudo systemctl list-dependencies
Надеюсь это поможет :)
Кроме того, для других целей может быть полезно построить дерево папок символических ссылок systemctl:
tree /etc/systemd/system
На самом деле было действительно полезно выяснить старые / глючные модули, которые замедляли запуск моей системы, чтобы потом отключить их с помощью systemctl disable
команда.
РЕДАКТИРОВАТЬ
Тем не менее, я действительно согласен с OP, что эта базовая функциональность должна предоставляться через инструменты командной строки, а не графический инструмент ... Что, если вы не можете запустить X? Как вы тогда справляетесь со своим файлом svg?
Собственно, выход есть. Если вы не можете использовать scp
(инструмент ssh), чтобы загрузить файл на другой компьютер, fbi
действительно может вам помочь :)
sudo systemd-analyze plot > /home/user/startup.svg
fbi /home/user/startup.svg
Работал в моих TTY. Просто перемещайтесь по картинке с помощью стрелок. Есть варианты масштабирования, чтобы перечислить fbi -h
.
Я снова надеюсь, что это поможет. Он доступен в репозиториях Archlinux и Ubuntu.
РЕДАКТИРОВАТЬ 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
Возможно, вы все еще не полностью ответили на ваш вопрос, но попробуйте --fuzz
вариант
systemd-analyze critical-chain --fuzz 1h
Обратите внимание, что вы также можете указать единицуs чтобы увидеть их критическая цепь, поэтому вы не ограничены multi-user.target
systemd-analyze critical-chain network.target local-fs.target
Надеюсь это поможет