本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
systemd.preset — 服务预设文件
/etc/systemd/system-preset/*.preset
/run/systemd/system-preset/*.preset
/usr/lib/systemd/system-preset/*.preset
/etc/systemd/user-preset/*.preset
/run/systemd/user-preset/*.preset
/usr/lib/systemd/user-preset/*.preset
预设文件(*.preset)可用于设置哪些单元应该 默认启用/停用。 systemctl preset 命令(详见 systemctl(1)) 通常用于 软件包的安装脚本。 在 安装开始之前或完成之后, 根据预设文件的指引, 启用或停用 一组特定的单元。
详见 Presets 文档以了解更多有关预设的逻辑。
反对在软件包中内置预设文件, 而是应该在发行版内部 将所有预设文件集中在一起, 以方便系统管理员修改预设策略。
如果不存在预设文件,systemctl
preset 命令将会默认启用所有已安装的单元。
如果这不是你想要的(也就是其实你想默认停用所有单元),
那么必须内置一个仅包含一行
"disable *
"
的预设文件(参见下文的"例1")
预设文件的格式是一系列 "enable|disable 单元名" 模式的行, 其中的"单元名"可以包含shell风格的通配符。 空白行和以 # 或 ; 开头的行 将被忽略。
注意,必须在预设中引用"真实"的单元文件,不可引用任何别名(参见 systemd.unit(5) 以了解单元的"别名")。
"enable
" 表示默认启用指定的单元、
"disable
" 表示默认停用指定的单元。
如果多行都匹配同一个单元, 那么以第一个匹配的行为准。
预设文件的名称必须符合
"优先级-策略名.preset
" 格式,
其中的"优先级"是两位十进制数字。
软件包应该将自带的预设文件安装在
/usr/lib/
目录中。
/etc/
目录仅供系统管理员使用。
所有的预设文件(无论位于哪个目录中),
统一按照文件名的字典顺序处理。
如果有多个预设文件都作用于同一个单元,
那么仅以文件名最靠前(前缀数字最小)的那一个为准。
对于不同目录下的同名预设文件,
仅以优先级最高的目录中的那一个为准。
具体说来就是:
/etc/
的优先级最高、
/run/
的优先级居中、
/usr/lib/
的优先级最低。
如果系统管理员想要屏蔽
/usr/lib/
目录中的某个预设文件,
那么最佳做法是在 /etc/
目录中
创建一个指向 /dev/null
的同名符号链接,
即可彻底屏蔽 /usr/lib/
目录中的同名文件。
默认停用所有单元。将前缀设为
"99-
"
以确保被最后读取(优先级最低、易于被覆盖)。
例 2. 一个针对 GNOME 定制的预设
# /usr/lib/systemd/system-preset/50-gnome.preset enable gdm.service enable colord.service enable accounts-daemon.service enable avahi-daemon.*
这是一个GNOME软件包自带的预设文件。
明确启用三个指定的单元以及所有前缀名为
avahi-daemon
的单元(不考虑单元类型)。
这样可以确保
仅启用所有GNOME所依赖的单元,
同时又不改变其他单元。
例 3. 管理员自定义的预设
# /etc/systemd/system-preset/00-lennart.preset enable httpd.service enable sshd.service enable postfix.service disable *
这是一个系统管理员自定义的预设策略。
在明确启用了三个指定单元的同时,
停用了所有其他单元。
将前缀设为 "00-
" 以确保被最先读取(优先级最高),
这样所有之后与此冲突的预设文件都将变得无效。