运维学习--systemd 服务配置文件指南(2)
如果需要完全替换某个服务,才将 Unit 文件放到如果只需修改部分参数(如ExecStart),使用*.d目录更安全。
·
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/ - 如果只需修改部分参数(如
ExecStart、Environment),使用*.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
更多推荐




所有评论(0)