我试图了解系统启动时 Systemd 的操作。以我的拙见,通常要初始化的第一个目标是/usr/lib/systemd/user/default.target
,以下目标取自Ubuntu:
default.target
:
[Unit]
Description=Default
Documentation=man:systemd.special(7)
Requires=basic.target
After=basic.target
AllowIsolate=yes
default.target
需要并在之后运行basic.target
:
[Unit]
Description=Basic System
Documentation=man:systemd.special(7)
Wants=sockets.target timers.target paths.target
After=sockets.target timers.target paths.target
sockets.target
:
[Unit]
Description=Sockets
Documentation=man:systemd.special(7)
timers.target
:
[Unit]
Description=Timers
Documentation=man:systemd.special(7)
DefaultDependencies=no
Conflicts=shutdown.target
paths.target
:
[Unit]
Description=Paths
Documentation=man:systemd.special(7)
于是Systemd就去判断依赖的依赖、依赖的依赖等等,但是我们却走到了死胡同,怎么办?假设整个过程一切顺利,即所有依赖项defaul.target
都已确定并初始化,我们仍然需要multi-user.target
、sysinit.target
和其他目标,所有上述目标都没有提及这些目标。
Systemd 如何确定哪些目标需要初始化以及哪些目标应该被忽略?