修改 systemd 单元文件而不改变上游单元文件

gio*_*nda 53 systemd

我已经pimd通过apt. 这带有上游systemd单元文件 ( /lib/systemd/system/pimd.service)。

我希望服务在由于某种原因被杀死时重新启动,因此我希望Restart = always在单元文件中添加该行。

但是,我不想修改上游单元文件。

有什么解决方法吗?

HBr*_*ijn 74

您有两个选择:

  • 将单元文件从 复制/lib/systemd/system//etc/systemd/system/.
    然后进行修改/etc/systemd/system/pimd.service以完全覆盖包维护者提供的单元文件。

    该命令会systemctl edit --full <service-name>为您自动执行此操作。

  • 您可以更改或添加单元的特定配置设置,而无需通过.conf在插入目录中创建文件 来修改单元文件,/etc/systemd/system/<unit-name>.<unit-type>.d/
    即创建一个/etc/systemd/system/pimd.service.d/restart.conf

    该命令systemctl edit <service-name>会为您执行这些步骤。

man systemd.unit

  • 使用 `systemctl edit &lt;service-name&gt;` 可以使第二个选项更容易 (15认同)
  • 第一个使用`systemctl edit --full &lt;service-name&gt;`。 (9认同)
  • 请重新构建此答案,以便在每个部分中首先显示 ```system edit``` 命令。最好使用这些工具来避免拼写错误和错误配置。 (2认同)

Hen*_*gel 27

RHEL 文档推荐了两种方式:

  1. 通过在下面创建配置目录和文件来扩展默认单元文件 /etc/systemd/system/[name-goes-here].service.d/config_name.conf

在这种情况下,文件需要包含如下内容:

[Service]
Restart=always
Run Code Online (Sandbox Code Playgroud)

这就是systemctl edit [name-goes-here]它的作用,它创建该目录并override.conf在其中创建。

  1. 在其中创建原始单元文件的副本并/usr/lib/systemd/system//etc/systemd/system/其中进行更改。

我会尝试选项一,但它们都是可行的选项。无论哪种方式,请记住systemctl daemon-reload在进行更改后运行。

有关创建和修改 systemd 单元文件的 RHEL 文档