Skip to content

Commit 3bc6725

Browse files
committed
ops/service: systemctl {show,list-dependencies}, systemd-analyze {plot,blame,critical-chain}
1 parent d2728d3 commit 3bc6725

File tree

1 file changed

+59
-1
lines changed

1 file changed

+59
-1
lines changed

docs/ops/service.md

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,65 @@ Systemd 中的 unit 有很多状态,大致可以归为以下几类:
124124
: 指定启动顺序,即相关的 unit 需要在前者启动完成,进入 active 状态后才会尝试启动。这两个字段在 `[Unit]` section 中指定。
125125
与 Wants/Requires 不同,Before/After 只是指定启动顺序,不影响依赖关系。
126126

127-
需要注意的是,依赖关系和启动顺序是互相独立的。如果只写 `Requires=``Wants=`,没有写 `Before=``After=`,那么 systemd 会启动依赖与被依赖的单元,但是不保证它们的启动顺序。
127+
需要注意的是,依赖关系和启动顺序是互相独立的。如果只写 `Requires=``Wants=`,没有写 `Before=``After=`,那么 systemd 会启动依赖与被依赖的单元,但是不保证它们的启动顺序;反过来,如果只写 `Before=``After=`,那么 systemd 不保证这些服务会被启动。
128+
129+
!!! tip "获取某个 unit 的顺序与依赖关系"
130+
131+
使用 `systemctl show [unit]` 可以查看某个 unit 的所有属性,包括上面提到的依赖关系和启动顺序。例如:
132+
133+
```console
134+
$ systemctl show gdm.service
135+
Id=gdm.service
136+
Names=gdm.service display-manager.service
137+
Requires=system.slice sysinit.target dbus.socket
138+
WantedBy=graphical.target
139+
[email protected] shutdown.target plymouth-quit.service
140+
Before=graphical.target shutdown.target
141+
After=fwupd.service rc-local.service systemd-journald.socket sysinit.target basic.target system.slice plymouth-quit.service systemd-user-sessions.service plymouth-start.service dbus.socket [email protected]
142+
(以下省略)
143+
```
144+
145+
此外使用 `systemctl list-dependencies [unit]` 可以以树状结构显示某个 unit 的依赖关系:
146+
147+
```console
148+
$ systemctl list-dependencies gdm.service
149+
gdm.service
150+
● ├─dbus.socket
151+
● ├─system.slice
152+
● └─sysinit.target
153+
● ├─dev-hugepages.mount
154+
● ├─dev-mqueue.mount
155+
● ├─kmod-static-nodes.service
156+
● ├─ldconfig.service
157+
● ├─proc-sys-fs-binfmt_misc.automount
158+
● ├─sys-fs-fuse-connections.mount
159+
● ├─sys-kernel-config.mount
160+
● ├─sys-kernel-debug.mount
161+
● ├─sys-kernel-tracing.mount
162+
● ├─systemd-ask-password-console.path
163+
● ├─systemd-binfmt.service
164+
(以下省略)
165+
```
166+
167+
!!! tip "分析系统启动时间"
168+
169+
相比传统的 init,systemd 的一大卖点就是通过分析顺序与依赖,并行启动服务,从而缩短系统启动时间。可以使用 `systemd-analyze` 来绘制启动时间线:
170+
171+
```console
172+
systemd-analyze plot > boot.svg
173+
```
174+
175+
每个服务的启动时间可以使用 `blame` 子命令查看:
176+
177+
```console
178+
systemd-analyze blame
179+
```
180+
181+
不过,`systemd-analyze blame` 显示的最耗时的服务可能并不会实际影响启动。如果需要快速查看对启动时间影响最大的服务,可以查看关键路径:
182+
183+
```console
184+
systemd-analyze critical-chain
185+
```
128186

129187
#### 模板 {#unit-template}
130188

0 commit comments

Comments
 (0)