Skip to content

Unit设计说明书

1 概述

unit是所有sysmaster管理的subunit的基础,sysmaster通过配置文件来定义每个具体subunit实例的行为,unit负责出所有subunit运行时功能行为的定义,以及设置为开机自动时需要的信息

目的

本文用描述unit支持的属性(通过配置文件定义),并清晰描述每个定义的配置文件的具体目的,和使用的场景。并记录unit每个配置演进过程。

2 特性需求概述

表1:特性需求列表

需求编号 需求名称 特性描述 优先级
1 支持unit基本功能定义 支持定义unit运行时公共行为的定义 高
2 支持unit设置为开机启动功能定义 定义unit设置为开机时,需要执行的动作 高

3 需求场景分析

sysmaster通过unit管理操作系统中各类服务的生命周期,每类服务运行时需要执行生命类型的操作,通过配置文件来进行定义,对公共的行为进行同一的定义,将重复工作降到最低,此部分需求分析,需要结合系统维护过程中经常用到的属性,并需要考虑和systemd兼容的兼容性

3.2 特性场景分析

系统中的服务执行的主要动作包含load、reload、start、restart、stop并且还需要支持对于具体服务状态的查询,unit公共属性用于定义unit执行具体动作是的行为,并且unit支持一些运行时的依赖关系,也需要在unit配置文件中进行定义,参考日常使用情况,以及兼容性考虑,unit公共属性分成两个部分:

  1. [Base]
配置名称 值类型 配置项说明 使用场景 优先级 是否支持 容器 虚机 物理机
Description String unit的描述,用于说明unit的功能 使用sctl命令查询unit信息时用于显示 高 是 √ √ √
Documentation String 配置具体服务的帮助文档 显示配置的帮助文档 低 否 √ √ √
Requires String 可以配置多个,之间使用空格隔开 配置依赖的其他unit,并支持同步启动,unit如果状态"failed",则此单元启动失败 高 是 √ √ √
Wants String 可以配置多个,之间使用空格隔开 require弱化版本,不受被依赖单元的启动状态影响 高 是 √ √ √
Before String 可以配置多个,之间使用空格隔开 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动 高 是 √ √ √
After String 可以配置多个,之间使用空格隔开 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动 高 是 √ √ √
Conflicts String 可以配置多个,之间使用空格隔开 这里指定的 Unit 不能与当前 Unit 同时运行 高 是 √ √ √
Condition... String 当前 Unit 运行必须满足的条件,否则跳过运行,保持当前状态不变,不会影响require依赖此unit的启动 高 是 √ √ √
Assert... String 当前 Unit 运行必须满足的条件,否则会报启动失败 高 是 √ √ √
DefaultDependencies boolean 是否增加默认依赖,默认为yes 不同类型的unit,有不同的默认依赖,具体有各个子类分析 高 是 √ √ √
OnFailureJobMode enumerate 高 是 √ √ √
StartLimitInterval number 高 是 √ √ √
StartLimitBurst number 高 是 √ √ √
StartLimitAction enumerate 高 是 √ √ √
SuccessAction enumerate 高 是 √ √ √
FailureAction enumerate 高 是 √ √ √
BindsTo String 与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行 低 否 X X X
AllowIsolate bool 默认值为no 为兼容sysv的runlevel切换,支持在线切换,使用不广,暂时不支持 低 否 X X X
IgnoreOnIsolate bool 默认值为yes 支持target切换时,该服务不停止运行 低 否 X X X
  1. [Dist]
配置名称 值类型 配置项说明 使用场景 优先级 是否支持 容器 虚机 物理机
WantedBy String 可以配置多个,之间使用空格隔开 主动期望被其他单元wanted,触发自己启动 高 是 √ √ √
RequiredBy String 可以配置多个,之间使用空格隔开 主动期望被其他单元required,触发自己启动 高 是 √ √ √

3.3 特性影响分析

4 特性/功能实现原理

4.1 总体方案

要实现通过unit管理系统中的服务,包含以下步骤:
1. 解析unit的配置文件,转换成unit对象
2. 执行unit对应的动作
整体模块划分包括:
1. load模块,将配置文件转换成unit
2. unit_dataStore,保存unit的状态
3. unit模块,包含unit属性

Last update: March 2, 2023
Created: February 14, 2023