我试图更好地理解 systemd 中的目标单元是如何工作的,但对graphical.target“想要”的内容感到困惑。
如果我跑ls -l
进去/etc/systemd/system/graphical.target.wants
我会看到:
total 0
lrwxrwxrwx 1 root root 43 Jul 19 16:50 accounts-daemon.service -> /lib/systemd/system/accounts-daemon.service
如果我跑ls -l
进去/lib/systemd/system/graphical.target.wants
我会看到:
total 0
lrwxrwxrwx 1 root root 39 Jul 12 11:28 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service
该文件/lib/systemd/system/graphical.target
包含:
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes
最后,如果我运行systemctl show --property "Wants" graphical.target
我会得到:
Wants=hddtemp.service ureadahead.service speech-dispatcher.service systemd-update-utmp-runlevel.service grub-common.service ntp.service lxdm.service accounts-daemon.service ondemand.service
“想要”的来源有哪些权威?
答案1
单元文件的有效依赖关系由多个来源组合而成。对于graphical.target
,它们是:
Wants=
文件本身中的语句graphical.target
(请注意,单元文件本身可以放置在/lib
、/run
或下的各个目录中/etc
,它们按此顺序相互映射);Wants=
所谓的 drop-in 文件中的语句$PREFIX/systemd/system/graphical.target.d/*.conf
(其中 PREFIX 如上所述,并且同名的 drop-in 文件相互独立);符号链接到特殊目录中所需的单元
$PREFIX/systemd/system/graphical.target.wants
(同样,前缀如上所述)。
来自所有这些来源的依赖项只是简单地相加,此外还有许多隐式依赖项(请阅读systemd.目标(5)了解详情)。
因此,要查看有效的依赖关系,最好使用命令systemctl show-property -p Wants
。不幸的是,无法查看哪些依赖项来自哪些位置 - 如果您想删除一个依赖项,则必须手动检查这一点。