1. 教程文档

参考链接:https://systemd-book.junmajinlong.com/service_1.html

2. systemd 服务配置文件路径

系统配置目录

/usr/lib/systemd/system

存放软件包提供的默认配置,属于只读的系统文件。

用户配置目录

/etc/systemd/system

在该目录下可以是普通的 .service 文件,也可以软连接到 /usr/lib/systemd/system 目录下的配置文件。

3. system 文件加载规则

systemd 在加载服务配置时,会按照以下优先级顺序合并配置(后加载的配置会覆盖前面的同名选项):

3.1 /usr/lib/systemd/system/

软件包(如 Docker)安装的默认 Unit 文件(如 docker.service)。
这些文件不应手动修改,因为软件更新时可能被覆盖。

3.2 /etc/systemd/system/

系统管理员自定义的 Unit 文件(完全替换原始配置)。如果这里存在 docker.service,它会完全替代。

3.3 /etc/systemd/system/*.service.d/

*.d 目录中的 .conf 文件会作为**“片段”**,按字母顺序加载并部分覆盖原始配置。

3.4 /run/systemd/system/

运行时临时配置(重启后失效)。

3.5 总结

  • 如果需要完全替换某个服务,才将 Unit 文件放到 /etc/systemd/system/
  • 如果只需修改部分参数(如 ExecStartEnvironment),使用 *.d 目录更安全。

4. system 文件配置解析

4.1 模块解析

  • Unit:定义该服务作为 Unit 角色时相关的属性
  • Service:定义本服务相关的属性
  • Install:定义本服务在设置服务开机自启动时相关的属性。换句话说,只有在创建/移除服务配置文件的软链接时,Install 段才会派上用场。这一配置段不是必须的,当未配置 [Install] 时,设置开机自启动或禁止开机自启动的操作将无任何效果

4.2 Unit 模块

[Unit]
Description=OpenSSH server daemon                    # 服务描述
Documentation=man:sshd(8) man:sshd_config(5)        # 文档位置
After=network.target sshd-keygen.target           # 启动顺序依赖
Wants=sshd-keygen.target                            # 弱依赖关系

常用 Unit 配置项:

  • Description: 服务的简短描述
  • Documentation: 相关文档的 URL 或 man 页面
  • After: 指定在哪些 unit 之后启动
  • Before: 指定在哪些 unit 之前启动
  • Requires: 强依赖,依赖失败则本服务失败
  • Wants: 弱依赖,依赖失败不影响本服务
  • Conflicts: 冲突关系,不能同时运行

4.3 Service 模块

[Service]
Type=notify                                          # 服务类型
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config  # 环境变量文件
EnvironmentFile=-/etc/sysconfig/sshd                # 环境变量文件(可选)
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY # 启动命令
ExecReload=/bin/kill -HUP $MAINPID                  # 重载命令
KillMode=process                                     # 停止模式
Restart=on-failure                                   # 重启策略
RestartSec=42s                                       # 重启间隔

Service 类型(Type):

  • simple: 默认类型,ExecStart 启动的进程为主进程
  • forking: 服务会 fork 子进程,父进程退出
  • oneshot: 执行一次性任务
  • notify: 服务启动完成后会发送通知
  • dbus: 服务通过 D-Bus 获得名称
  • idle: 延迟执行直到其他任务完成

重启策略(Restart):

  • no: 不重启(默认)
  • always: 总是重启
  • on-success: 正常退出时重启
  • on-failure: 异常退出时重启
  • on-abnormal: 异常信号或超时时重启

4.4 Install 模块

[Install]
WantedBy=multi-user.target    # 启用时创建符号链接的目标

常用 Install 配置项:

  • WantedBy: 被哪个 target 需要
  • RequiredBy: 被哪个 unit 强依赖
  • Alias: 服务别名

5. 获取服务的配置文件信息

systemctl cat <服务名称>

5.1 参考示例

root@VM-16-3-ubuntu:~# systemctl cat sshd

输出示例:

# /lib/systemd/system/ssh.service
[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify

[Install]
WantedBy=multi-user.target
Alias=sshd.service
Logo

一站式 AI 云服务平台

更多推荐