Menu Close

16.13. 修改现有单元文件

在系统中安装的服务会附带保存在 /usr/lib/systemd/system/ 目录中的默认单元文件。系统管理员不应该直接修改这些文件,因此任何自定义都必须仅限于 /etc/systemd/system/ 目录中的配置文件。

流程

  1. 根据所需更改的程度,选择以下方法之一:

    • /etc/systemd/system/unit.d/ 中创建一个附加配置文件的目录。我们推荐在大多数用例中使用这个方法。它启用了额外的功能来扩展默认配置,同时仍然引用原始的单元文件。因此会自动应用在软件包升级中引入的默认单元更改。如需更多信息,请参阅扩展默认单元配置
    • /etc/systemd/system/ 中创建原始单元文件 /usr/lib/systemd/system/ 的副本并在此进行修改。这个副本会覆盖原始文件,因此不会应用软件包更新带来的更改。这个方法对无论软件包更新都应保留的重要单元更改都很有用。有关详细信息,请参阅覆盖默认单元配置
  2. 要返回这个单元的默认配置,请删除 /etc/systemd/system/ 中的自定义创建配置文件。
  3. 要在不重启系统的情况下对单元文件应用更改,请执行:

    systemctl daemon-reload

    daemon-reload 选项会重新载入所有单元文件并重新创建依赖项树,这是立即将任何更改应用到单元文件所必需的。另外,您可以使用以下命令得到同样的结果,该命令必须以 root 用户执行:

    init q
  4. 如果修改后的单元文件属于正在运行的服务,则必须重启该服务以接受新设置:

    systemctl restart name.service
重要

要修改由 SysV initscript 处理的服务(如依赖项或超时)的属性,请不要修改 initscript 本身。反之,为服务创建一个 systemd 置入配置文件,如下所述:扩展默认单元配置覆盖默认单元配置

然后,像普通 systemd 服务一样管理该服务。

例如:要扩展 network 服务的配置,不要修改 /etc/rc.d/init.d/network initscript 文件。反之,创建新目录 /etc/systemd/system/network.service.d/ 和一个 systemd drop-in 文件 /etc/systemd/system/network.service.d/my_config.conf。然后将修改的值放到 drop-in 文件中。注: systemd 知道 network 服务为 network.service,这就是为什么创建的目录必须名为 network.service.d