好的,你可以使用 systemd-analyze
配合其他命令来查看系统服务的详细启动顺序。以下是几种有效的方法:
方法1:查看所有单元的激活时间戳(最直接的启动顺序)
# 按时间顺序列出所有单元的启动时间
systemd-analyze plot | grep -E "(starting|started)" | sort -k3
或者更精确的方法:
journalctl -o short-monotonic --boot | grep "Starting.*service" | sort -k3
方法2:使用 systemd-analyze dot 生成依赖图(推荐)
# 安装 graphviz(如果未安装)
sudo apt install graphviz # Ubuntu/Debian
sudo yum install graphviz # RHEL/CentOS
# 生成启动顺序图
systemd-analyze dot --order --from-pattern="*.service" | dot -Tsvg > boot_order.svg
用浏览器打开 boot_order.svg
文件,可以看到所有服务的启动顺序和依赖关系。
方法3:查看当前运行的服务的启动时间线
# 显示所有服务的启动时间线(按时间排序)
systemd-analyze dump | grep -E "(Unit begins|Unit .* finished)" | sort -k2
方法4:使用 journalctl 查看启动日志
# 查看本次启动的所有服务启动记录(按时间顺序)
journalctl -b --no-pager -o short-monotonic --unit="*.service" | grep "Starting"
或者更简洁的版本:
journalctl -b --no-pager -o cat _TRANSPORT=stdout | grep "Starting" | sort
方法5:生成详细的文本报告
# 生成详细的启动分析报告
systemd-analyze critical-chain --fuzzy=yes > boot_sequence.txt
# 查看关键目标的时间线
systemd-analyze critical-chain default.target > default_target_sequence.txt
⚡ 快速查看关键服务顺序
如果只需要查看主要服务的顺序,可以尝试:
# 查看耗时最长的10个服务及其顺序
systemd-analyze blame --no-pager | head -10
# 查看关键系统服务的启动顺序
journalctl -b --no-pager -o short-monotonic \
--unit=systemd-* \
--unit=dbus.service \
--unit=network*.service \
--unit=ssh.service \
--unit=nginx*.service \
| grep "Starting"
📊 示例输出说明
典型的输出格式:
[ 1.234567] Starting Docker Application Container Engine...
[ 1.456789] Started Docker Application Container Engine.
[ 2.345678] Starting Network Manager Script Dispatcher Service...
[ 2.567890] Started Network Manager Script Dispatcher Service.
- Starting: 服务开始启动的时刻
- Started: 服务完成启动的时刻
时间戳是从内核启动开始计算的单调时间(单位:秒)。
建议使用方法2生成SVG图表,这样可以最直观地看到所有服务的完整启动顺序和依赖关系。
内容由零声教学AI助手提供,问题来源于学员提问