我在问题下的意思是:有没有办法转储有序列表(就像 pstree 对进程所做的那样)以查看 systemd 如何执行提供的单元集,即依赖项解决后的树和作业排队等待执行? 我知道你可以通过分析 systemd 状态数据来做到这一点,但是有没有一种快速的方法来查看这样的树?这对故障调查有很大帮助(例如,如果您发现启动过程卡在某个单元上,您将能够确定大概位置以进行更深入的调查。
IBr*_*IBr 111
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
Run Code Online (Sandbox Code Playgroud)
示例中的 NetworkManager 基本上保持整个启动。
如果您想获得更详细的视图,您可以在 svg 文件中渲染整个执行链。
systemd-analyze plot > something.svg将整个链(120 多个模块)作为进度条输出到高分辨率 svg 文件,该文件显示状态、被阻止和其他问题。
最后,您有systemd-analyze dot输出点文件的工具,该文件输出整个层次结构:
systemd-analyze dot | dot -Tpng -o stuff.png
使用点工具,您也可以将其输出为 ps 和 svg 文件。
以上所有工具都内置在 systemd-analyze 工具中,该工具至少在 archlinux 中默认与 systemd 一起提供。我认为也有一些 3rd 方项目在处理它。
Joe*_*l.O 27
不确定我是否正确理解了这个问题,但是可以使用以下命令进行树形可视化:
sudo systemctl status
Run Code Online (Sandbox Code Playgroud)
并且 :
sudo systemctl list-dependencies
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :)
此外,构建 systemctl 符号链接文件夹树对于其他目的可能很有用:
tree /etc/systemd/system
Run Code Online (Sandbox Code Playgroud)
找出使我的系统启动变慢的旧/有问题的单元实际上非常有用,然后使用systemctl disable命令禁用它们。
编辑
这就是说我真的同意 OP 应该通过命令行工具而不是图形工具来提供这个基本功能......如果你不能启动 X 怎么办?你如何处理你的 svg 文件呢?
其实是有办法的。如果您无法使用scp(ssh 工具)在另一台计算机上获取您的文件,fbi实际上可能对您有所帮助:)
sudo systemd-analyze plot > /home/user/startup.svg
fbi /home/user/startup.svg
Run Code Online (Sandbox Code Playgroud)
在我的 TTY 工作。只需使用箭头在图片内导航即可。有缩放选项,列出 do 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
Run Code Online (Sandbox Code Playgroud)
小智 14
可能仍然无法完全回答您的问题,但请尝试--fuzz选择
systemd-analyze critical-chain --fuzz 1h
Run Code Online (Sandbox Code Playgroud)
请注意,您也可以指定单位小号看到自己的关键链,这样你就不会局限于multi-user.target
systemd-analyze critical-chain network.target local-fs.target
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
122308 次 |
| 最近记录: |