override.conf 文件是否更改了实际的服务文件conf?

override.conf 文件是否更改了实际的服务文件conf?

我已经创建了一个override.conf文件systemd-journal-catalog-update.service并将其放置在systemd-journal-catalog-update.service.d/目录中。其目的是systemd-tmpfiles-setup.servicesystemd-journal-catalog-update.service file.

该文件现在包含以下内容:

[Unit]
After=local-fs.target systemd-tmpfiles-setup.service

我的override.conf文件有这个:

[Unit]
After=
After=local-fs.target

但是,该systemd-journal-catalog-update.service文件似乎没有改变。我是否误解了该override.conf文件的工作原理?我知道我可以手动修改原始服务文件,但项目情况限制了这种选择。非常感谢你们提供的任何帮助/建议。

答案1

根据系统单元手册页:

依赖项(After= 等)无法重置为空列表,因此只能在 drop-ins 中添加依赖项。如果要删除依赖项,则必须覆盖整个单元。

可以通过遵循手册页中的示例二来覆盖整个单元文件:

有两种方法可以覆盖单元文件中的供应商设置:将单元文件从 /usr/lib/systemd/system 复制到 /etc/systemd/system 并修改所选设置。 [...]第一种方法的优点是可以轻松覆盖整个单元,不再解析供应商单元。它的缺点是供应商对单元文件的改进不会自动合并到更新中。

就您而言,您必须(作为 root)

  • cp /usr/lib/systemd/system/systemd-journal-catalog-update.service /etc/systemd/system
  • systemctl daemon-reload
  • systemctl restart systemd-journal-catalog-update

之后,systemctl status将指向以下位置的服务文件/etc

# systemctl status systemd-journal-catalog-update
● systemd-journal-catalog-update.service - Rebuild Journal Catalog
     Loaded: loaded (/etc/systemd/system/systemd-journal-catalog-update.service; static)
     Active: active (exited) since Sat 2021-05-22 16:27:07 CEST; 3 weeks 2 days ago
[...]

上述内容systemctl cat也不会显示以下文件/etc/

# systemctl cat systemd-journal-catalog-update
# /etc/systemd/system/systemd-journal-catalog-update.service
#  SPDX-License-Identifier: LGPL-2.1-or-later
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Rebuild Journal Catalog
[...]

/etc您现在可以根据需要编辑该文件,systemctl daemon-reload再次运行并systemctl restart systemd-journal-catalog-update使用自定义单元文件及其设置运行该服务。

请注意手册页中提到的以下内容:

它的缺点是供应商对单元文件的改进不会自动合并到更新中。

由于 systemd 现在读取的单元文件与您的发行版的 systemd 包中的单元文件完全不同,因此您必须手动将该文件中的任何更新应用/usr/lib到您自己的副本中。.rpmnew(来自基于 RPM 的发行版)或.pacnew(来自基于 pacman 的发行版)如果包管理器跟踪的配置文件已被本地管理员修改,则通常会生成文件,并且在这种情况下不会生成包。

相关内容