在 CentOS Linux 7.8 系统上,如果我创建一个 systemd 服务配置文件并在部分中包含LogsDirectory
和/或,然后执行,则会打印以下错误:CacheDirectory
[Service]
systemctl daemon-reload
/var/log/messages
Sep 8 13:14:50 model systemd: [/etc/systemd/system/hugo-sbml.service:18] Unknown lvalue 'CacheDirectory' in section 'Service'
Sep 8 13:14:50 model systemd: [/etc/systemd/system/hugo-sbml.service:19] Unknown lvalue 'LogsDirectory' in section 'Service'
的手册页systemd.exec
令人困惑:它没有记录LogsDirectory
和CacheDirectory
,但它做列出与它们相关的故障相关的错误代码。通过 Google 搜索,这些设置似乎在 systemd 配置文件中被广泛使用。
CentOS 7 上服务配置文件中的LogsDirectory
和设置是否有替代品?或者换句话说,如果我们需要创建日志和缓存目录,我们该怎么办?CacheDirectory
systemd
答案1
这是某种文档错误。您正在寻找的指令在 CentOS 7 使用的 systemd 219 中不存在。它们是在 systemd 235 中添加。您可以在具有 systemd 239 的 CentOS 8 中使用它们。您也可以自己创建这些目录。
- 单元获得了新选项 StateDirectory=、CacheDirectory=、LogsDirectory= 和 ConfigurationDirectory=,它们与 RuntimeDirectory= 密切相关,但管理 /var/lib、/var/cache、/var/log 和 /etc 下的每个服务目录。通过使用它们,可以编写单元文件,这些文件在激活时会自动在这些位置获得适当拥有的服务特定目录,从而使单元文件自包含并提高与无状态系统和出厂重置的兼容性,其中 /etc 或 /var 在启动时未填充。与这些新设置匹配的还有 StateDirectoryMode=、CacheDirectoryMode=、LogsDirectoryMode=、ConfigurationDirectoryMode=,用于配置这些目录的访问模式。这些设置与 DynamicUser=yes 结合使用特别有用,因为它们为存储提供了安全、适当拥有、可写和有状态的位置,而这些位置被排除在这些服务所在的沙盒之外。
答案2
根据变更日志消息,选项StateDirectory=, CacheDirectory=, LogsDirectory= and ConfigurationDirectory=
是 235 中的新选项。219 处的 EL 7 没有这些选项。
您需要想出一些不受 systemd 管理的方法来在/var/log/
和下创建这些目录/var/cache/
。创建拥有这些目录的 RPM 包,将包装器脚本添加到 systemd 单元mkdir
,更改软件以创建其日志和缓存目录(如果它们不存在)。
是的,有点令人失望的是,日志和缓存目录的存在并不包含在单元中。一旦 systemd 升级,换句话说,升级到 CentOS 8,您就可以使用该功能。