Menu Close

16.14. 扩展默认单元配置

这部分论述了如何使用附加配置选项扩展默认单元文件。

流程

  1. 要使用额外的配置选项扩展默认单元文件,首先在 /etc/systemd/system/ 中创建配置目录。如果扩展服务单元,以 root 用户身份执行以下命令:

    mkdir /etc/systemd/system/name.service.d/

    使用您要扩展的服务的名称替换 name。以上语法适用于所有单元类型。

  2. 在上一步中创建的目录中创建配置文件。请注意,文件名必须以 .conf 后缀结尾。类型:

    touch /etc/systemd/system/name.service.d/config_name.conf

    使用配置文件的名称替换 config_name。此文件遵循普通单元文件结构,因此所有指令都必须在适当的部分中指定,请参见单元文件结构

    例如,要添加自定义依赖项,请使用以下内容创建配置文件:

    [Unit]
    Requires=new_dependency
    After=new_dependency

    这里的 new_dependency 代表这个单元被标记为依赖项。另一个例子是主进程退出后重新启动服务的配置文件,延迟 30 秒:

    [Service]
    Restart=always
    RestartSec=30

    建议您只创建专注于一个任务的小配置文件。这些文件可轻松地移动或者链接到其他服务的配置目录。

  3. 要应用对单位所做的更改,以 root 用户身份执行:

    systemctl daemon-reload
    systemctl restart name.service

例 16.1. 扩展 httpd.service 配置

要修改 httpd.service 单元,以便在启动 Apache 服务时自动执行自定义 shell 脚本,请执行以下步骤。

  1. 创建目录和自定义配置文件:

    # mkdir /etc/systemd/system/httpd.service.d/
    # touch /etc/systemd/system/httpd.service.d/custom_script.conf
  2. 如果想要用 Apache 自动启动的脚本位于 /usr/local/bin/custom.sh,在 custom_script.conf 文件中插入以下文本:

    [Service]
    ExecStartPost=/usr/local/bin/custom.sh
  3. 要应用单元更改,请执行:

    # systemctl daemon-reload
    # systemctl restart httpd.service
注意

/etc/systemd/system/ 配置文件中的配置文件优先于 /usr/lib/systemd/system/ 中的单元文件。因此,如果配置文件包含只可以指定一次的选项,如 DescriptionExecStart,则此选项的默认值会被覆盖。请注意,在 systemd-delta 命令的输出中(在 Monitoring overrides units 中所述)中,比如这个单元总是被标记为 [EXTENDED],即使总和和一些选项也会被覆盖。