我创建了一个服务单元来运行 apache-httpd 并且它正在工作,但我担心我的服务单元配置文件是一个文件,但目录(/etc/systemd/system)中的其他项目都是目录,所以我的文件看起来像是一个异常:
它有效,但为什么我的定义与其他人不同?
我用的是“技术指南”中创建服务单元的说明。
答案1
您显示的其他目录是.wants
-.d
它们不包含整个服务文件(该文件将存在于/lib/systemd/system
通过包安装的服务中),而仅包含修改。
例如,如果您运行systemctl edit (servicename).service
进行更改,也许您想设置其他环境变量,您将自动获得/etc/systemd/system/servicename.d/override.conf
包含您的更改的 。
这样做的目的是彻底分离管理员所做的本地更改/etc/
和包管理的服务定义,/lib/systemd/system
这些定义可能会随着包更新而接收更改。
答案2
单位是两个都文件和目录。这完全的有关单元的信息在两者上分发并从中读取。
强制文件以.service
、.target
、.socket
、.timer
、.mount
等结尾。
可选目录以.service.d
、.service.requires
、.target.wants
等结尾。以结尾的.d
包含常规文件。以符号链接结尾.wants
并.requires
包含符号链接的链接。有关详细信息,请阅读systemd.unit
手册。
在您的情况下,文件和(当前不存在)目录都位于/etc/systemd
.您,本地管理员,是两者的来源。对于其他单元,文件位于其他位置,例如 under /usr/lib/systemd
,目录位于/etc/systemd
.这反映了这样一个事实:文件部分是由软件包提供的,而目录部分是作为本地管理员选择和修改(例如修改Wants
一个单元的设置以启用某些其他单元)的结果而创建的。
systemd 的模型是,/usr/lib/systemd
和下的内容/usr/local/lib/systemd
是包提供的, 下内容/run/systemd
是在系统运行时动态创建的, 下内容/etc/systemd
是由本地系统管理员确定的。所有四个区域中的常规文件、目录和符号链接(可能涉及多个system
子目录,详细信息请参阅手册)都被合成为完整的单元信息,并具有关于优先级的规则。