apt install nginx
我在 Debian 9.2 主机上安装了 Nginx 。它运行正常,但在查看 Systemd 日志时journalctl -u nginx
,我发现了有趣的东西:
启动高性能 Web 服务器和反向代理服务器。
事实证明 Systemd 重用了单元文件的“[Unit]”部分中的“Description”字段,并且确实如此/lib/systemd/system/nginx.service
:
描述=高性能 Web 服务器和反向代理服务器
这是 Debian Nginx 维护者或其他人开的玩笑吗? 甚至 Systemd 文档https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Description=说:
不好的例子是“高性能轻量级 HTTP 服务器”(太通用)
因此,我正在考虑编辑“描述”字段,使其更具描述性,但我不确定当我将更新 nginx 包作为系统更新或升级的一部分时,这将如何工作——如果nginx.service
尝试安装另一个版本,我会收到冲突警告吗?我知道包配置文件就是这种情况,这也适用于包中的其他类型的文件吗?
答案1
粗略地讲,/usr
或中的任何内容/lib
都应视为只读,尤其是由软件包安装的任何内容。(偶尔也有不幸的例外。)除非软件包中对某个文件进行了特殊标记,否则升级将直接覆盖它。
更改各种 systemd 文件的推荐方法是将它们复制到/etc
。例如,单元文件/etc/systemd/system/nginx.service
将覆盖 /usr/lib 中的单元文件。(它甚至会覆盖自动生成的 init.d 服务单元。)使用该工具systemd-delta
查看所有被覆盖单元的差异。
好吧,我说“推荐”是因为它也适用于像 udev 规则之类的东西......但更好的方法是使用“插入”文件仅覆盖单元的部分内容/etc/systemd/system/nginx.service.d/foobar.conf
- 这只需要两行,即部分名称[Unit]
和您的新Description=
设置;其余的将从/usr/lib 继承。
在这两种情况下,您都可以systemctl edit [--full]
打开编辑器并进行更改。
最后,通用的 Debian 选项是告诉打包系统 (dpkg) 避免更新特定文件,无论它位于何处。您可以使用 将实际文件“转移”到其他地方dpkg-divert
。其他发行版也有类似的功能,例如 Arch 的 pacman 使用NoExtract=
和NoUpgrade=
。