Skip to main content

Centos7 systemd

CentOS 7 使用 systemd 作为其系统和服务管理器,取代了传统的 System V init 系统。systemd 通过配置文件(称为 unit files)来描述和控制服务、系统资源、挂载点、定时任务等。以下是关于 CentOS 7 中 systemd 配置文件的详细解释:

1. Unit 文件结构与类型

Unit 文件结构

每个 unit 文件是一种基于 INI 格式的文本文件,包含若干节(section),每个节以 [SectionName] 标记开始。常见的节包括:

  • [Unit]:包含关于该 unit 的基本信息,如描述、依赖关系等。
  • [Service]:当 unit 是服务类型时,定义服务的启动、停止、重启行为,以及运行环境、权限、执行命令等。
  • [Socket]:定义网络套接字激活服务的相关设置。
  • [Mount]:描述挂载点的属性和挂载行为。
  • [Timer]:用于定时任务的配置。
  • [Path]:定义路径(文件或目录)状态变化触发的行为。

Unit 类型

systemd 支持多种类型的 unit,包括但不限于:

  • Service units (*.service):管理守护进程或长期运行的服务。
  • Socket units (*.socket):基于网络套接字激活服务。
  • Target units (*.target):逻辑分组,代表系统的一种运行状态或模式,如 multi-user.targetgraphical.target
  • Mount units (*.mount):管理文件系统的挂载与卸载。
  • Timer units (*.timer):安排定时任务或周期性任务。
  • Path units (*.path):监测文件或目录的状态变化,触发相应操作。

2. Unit 文件位置

systemd 的配置文件分布在多个目录中,按照优先级从高到低依次为:

  • /etc/systemd/system/: 管理员自定义的 unit 文件存放处,这里的配置会覆盖系统默认设置。
  • /usr/lib/systemd/system/: 系统提供的默认 unit 文件,随软件包安装时生成,通常不应直接修改。
  • /run/systemd/system/: 动态生成的 unit 文件或临时修改,常用于会话级别的临时调整。

3. Unit 文件内容详解

*.service 文件为例,展示各个节的典型配置项:

[Unit]节点

  • Description: 服务的简短描述。
  • Documentation: 提供服务文档链接或说明。
  • After, Before: 定义服务启动顺序,表示本服务应在哪些 unit 之后或之前启动。
  • Requires, Wants: 定义服务依赖关系,前者表示硬依赖,后者表示软依赖。

[Service]节点

  • ExecStart, ExecStop, ExecReload: 定义服务启动、停止、重新加载时执行的命令。
  • Restart: 控制服务崩溃后的重启策略,如 alwayson-failure 等。
  • RestartSec: 重启服务前等待的时间。
  • User, Group: 服务运行的用户和组。
  • PermissionsStartOnly: 仅在启动时以特定权限执行命令。
  • Environment: 设置服务运行环境变量。
  • WorkingDirectory: 服务的工作目录。
  • SyslogIdentifier: 定义日志记录的标识符。
  • StandardOutput, StandardError: 指定服务的标准输出和错误输出重定向,如日志文件、journalsyslog

其他类型 unit 的相关配置

其他类型的 unit 如 socketmounttimerpath 等,都有各自特有的配置项,例如 ListenStream(用于 socket),What, PathExists, PathChanged(用于 path),OnActiveSec, AccuracySec(用于 timer),以及 What, Where, Type, Options(用于 mount)等。

4. 管理 Unit 文件

使用systemctl

服务的管理主要通过 systemctl 命令进行,包括:

  • systemctl start <unit>:启动服务。
  • systemctl stop <unit>:停止服务。
  • systemctl restart <unit>:重启服务。
  • systemctl status <unit>:查看服务状态。
  • systemctl enable <unit>:设置服务开机启动。
  • systemctl disable <unit>:取消服务开机启动。
  • systemctl reload <unit>:重新加载服务配置(如需支持)。
  • systemctl list-unit-files:列出所有 unit 文件及其启用状态。

创建或修改 Unit 文件

管理员可以在 /etc/systemd/system/ 目录下创建或编辑 unit 文件,或在此目录下创建符号链接指向 /usr/lib/systemd/system/ 中的默认文件以覆盖设置。对于某些服务,还可以在 /etc/systemd/system/<service>.service.d/ 目录下创建 .conf 文件,添加或覆盖原有服务配置的部分内容,而不必直接修改原服务文件。

5. Systemd 的特殊特性

  • 依赖解决与并行启动systemd 自动解决 unit 之间的依赖关系,能够并行启动多个无依赖关系的服务,显著加快系统启动速度。
  • Journal 日志系统:集成 journalctl 工具,提供统一的日志记录、检索和分析功能。
  • System Snapshots:支持创建和恢复系统快照,保存各 unit 当前状态信息。
  • 基于 Socket、D-Bus、Device、Path 的激活:支持多种事件驱动的服务启动机制。

6. 兼容性

虽然 systemd 替代了 System V init,但它仍兼容旧的 init 脚本。可以通过 systemd-sysv-generator 将传统的 init.d 脚本转换为对应的 systemd unit,使得遗留服务能在新系统中正常运行。不过,非由 systemd 启动的服务,systemctl 无法直接管理和控制。

总结来说,CentOS 7 中的 systemd 配置文件是管理系统服务、资源、定时任务等的核心工具。理解其结构、类型、位置和内容,掌握 systemctl 命令的使用,有助于高效地配置、监控和维护系统服务。