有没有办法看到systemd的执行树?

我在这个问题的意思是:有没有办法转储有序的列表(如pstree进程),看看systemd是如何执行提供的单位,即树的依赖关系解决和作业排队执行? 我知道你可以通过分析系统状态数据来做到这一点,但有没有一种快速的方法来看到这样一棵树? 这对失败调查将有很大的帮助(例如,如果你看到启动过程被困在某个单元上,那么你将能够find更深入调查的大概位置。

systemd-analyze是你的朋友。 例如systemd-analyze critical-chain守护进程的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 └─[email protected] @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 systemd-analyze dot | dot -Tpng -o stuff.png与点工具,你可以输出为ps和svg文件。

以上所有工具都内置在systemd-analyze工具中,默认情况下systemlinux中至less有这些工具。 我认为也有一些第三方项目也在处理它。

可能还没有完全回答你的问题,但尝试使用--fuzz选项

 systemd-analyze critical-chain --fuzz 1h 

请注意,您也可以指定单位来查看他们的关键链 ,所以您不仅限于multi-user.target

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

希望这可以帮助

不确定我是否正确地理解了这个问题,但是下面的命令提供了可视化树:

 sudo systemctl status 

并且 :

 sudo systemctl list-dependencies 

希望这可以帮助 :)

另外,build立一个systemctl符号链接文件夹的树可能对其他目的很有用:

 tree /etc/systemd/system 

实际上,找出使我的系统启动变慢的旧的/有问题的单元非常有用,以后使用systemctl disable命令禁用它们。

编辑

这就是说,我真的同意OP,这个基本function应该通过命令行工具,而不是一个graphics工具…如果你不能启动X? 那你怎么处理你的svg文件呢?

其实有一个办法。 如果您不能使用scp (ssh工具)在另一台计算机上获取您的文件, fbi可能实际上帮助您:)

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

工作在我的TTYs。 只需用箭头在图片内部导航即可。 有放大选项,列出做fbi -h

我再次希望这有助于。 它可以在Archlinux和Ubuntu的仓库中使用。

编辑2:

fbi不能通过ssh工作。 你可以像这个ssh -Y user@server一样进行X转发,但是你需要在你的远程服务器上运行一个X服务器。

这里最好的select是使用sshfs 。 它在用户空间中工作得很好,例如用鹦鹉螺。 有一个小configuration要做,请参阅:

 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 [email protected]:/home/user /mnt/yourmountingdir/ -o allow_other #Asks for host trusting and password sudo fusermount -u /mnt/yourmountingdir/ #To disconnect and unmount