本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
systemd.target — 目标单元配置
target
.target
以
".target
" 为后缀的单元文件,
封装了一个由 systemd 管理的启动目标,
用于在启动过程中将一组单元汇聚到一个众所周知的同步点。
此类单元没有专用的配置选项。 systemd.unit(5) 中描述了通用于所有单元类型的配置选项(亦称"配置指令"或"单元属性"), 它们位于 [Unit] 与 [Install] 小节。因为此类单元没有专用的配置选项, 所以并不存在专用的 [Target] 小节。
对于被目标单元汇聚的单元来说,
目标单元本身并不能提供任何额外的附加功能。
目标单元的功能仅仅是通过依赖关系将一组单元汇聚在一起,
形成一个同步点,并给这个同步点取一个众所周知的名称,
以便用作启动目标或其他单元的依赖。
目标单元非常适合用于替代传统的SysV运行级机制,
特别地,出于兼容性考虑,
类似 runlevel3.target
这样的目标单元,
应该专用于兼容传统SysV运行级的场合。
详见
systemd.special(7)
手册。
除非明确设置了
DefaultDependencies=no
,否则 target 单元将会自动添加下列依赖关系:
对通过
Wants=
或
Requires=
汇聚的单元的
After=
依赖(除非指定的单元中含有 DefaultDependencies=no
)。
注意,必须明确的在 target 单元文件中定义对被汇聚单元的 Wants=
或
Requires=
依赖。
例如,如果你在 some.service 单元文件中定义了 Wants=
some.target ,
那么并不会自动添加上述表示先后顺序的依赖关系。
Conflicts=
与 shutdown.target
Before=
依赖。shutdown.target
例 1. 一个简单的独立目标单元
# emergency-net.target [Unit] Description=Emergency Mode with Networking Requires=emergency.target systemd-networkd.service After=emergency.target systemd-networkd.service AllowIsolate=yes
当在 target 单元中添加对其他单元的依赖时,务必要检查这些单元是否设置了 DefaultDependencies=no
。
对于服务单元来说,除非明确设置了 DefaultDependencies=no
,
否则将会自动获得 Requires=sysinit.target
, After=sysinit.target
依赖。
在本例中,因为 emergency.target
与 systemd-networkd.service
都明确设置了 DefaultDependencies=no
,
也就是说它们都不包含对 sysinit.target
的依赖,
所以,很适合将它们引用到本例的 target 单元中。
要想进入本例所设置的"带网络的紧急维修模式",可以使用 systemctl
isolate emergency-net.target
命令,也可以使用
systemd.unit=emergency-net.target
内核引导选项。
如果某个单元将 WantedBy=emergency-net.target
加入到
[Install]
小节之中,那么在使用
systemctl enable 命令启用该单元时,将会同时确保该单元在
emergency-net.target
之前启动。
还可以通过 systemctl add-wants 命令在无须修改单元文件的情况下,
将任意单元添加为 emergency.target
的依赖。