特性
- 兼容 SysVinit 和 LSB init scripts
 - 以并行方式启动,启动速度更快
- 尽可能启动更少的进程
 - 尽可能将更多进程并行启动
 
 - 提供按需启动能力,只有在某个服务被真正请求的时候才启动它
 - 采用 Linux的 Cgroup 特性跟踪和管理进程的生命周期.Systemd 只需要简单地遍历指定的 CGroup 即可正确地找到所有的相关进程
 - 实现事务性依赖关系管理.系统启动过程是由很多的独立工作共同组成的,这些工作之间可能存在依赖关系.Systemd 维护一个”事务一致性”的概念,保证所有相关的服务都可以正常启动而不会出现互相依赖,以至于死锁的情况.
 - 使用 systemd-journald 提供日志服务.有便于管理,零维护,高性能,统一化的特点
 - 向后兼容 SysV 的服务脚本
 
基本概念
unit
系统初始化需要做的事情非常多,如启动后台服务以及做一些配置工作.这个过程中的每一步都被 Systemd 抽象为一个配置单元,即 unit.它主要包含如下几种类型
| 名称 | 文件扩展名 | 用途 | 
|---|---|---|
service unit | 
.service | 
用于定义系统类服务 | 
target unit | 
.target | 
用于实现模拟”运行级别” | 
mount unit | 
.mount | 
用于定义文件系统挂载点 | 
socket unit | 
.socket | 
用于标识进程间通信的 socket 文件 | 
snapshot unit | 
.snapshot | 
管理系统快照 | 
swap unit | 
.swap | 
用于标识 swap 设备 | 
automount unit | 
.automount | 
文件系统自动挂载设备 | 
path unit | 
.path | 
用于定义文件系统中的一个文件或目录 | 
timer unit | 
.timer | 
用来定时触发用户定义的操作 | 
Target和运行级别的对应关系
| sysvinit | systemd target | 备注 | 
|---|---|---|
| 0 | poweroff.target | 关闭系统 | 
| 1 | rescue.target | 单用户模式 | 
| 2 | multi-user.target | 多用户模式,无网络 | 
| 3 | multi-user.target | 多用户模式 | 
| 4 | - | 没有用到 | 
| 5 | graphical.target | 多用户,图形化界面 | 
| 6 | reboot.target | 重启 | 
service unit file
文件通常由三部分组成
[Unit]
Unit 配置块通常是配置文件的第一个配置块,用来定义 Unit 的元数据,以及配置与其他 Unit 的依赖关系.它的主要字段如下:
Description: 简短描述Documentation: 文档地址Requires: 当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败Wants: 与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败BindsTo: 与 Requires 类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行Before: 当前 Unit 必须在指定的 Unit 之前启动After: 当前 Unit 必须在指定的 Unit 之后启动Conflicts: 这里指定的 Unit 不能与当前 Unit 同时运行Condition...: 当前 Unit 运行必须满足的条件,否则不会运行Assert...:当前 Unit 运行必须满足的条件,否则会报启动失败
[Service]
Service 配置块用来定义 Service 的属性,只有 Service 类型的 Unit 才有这个配置块.它的主要字段如下:
Type: 定义启动时的进程行为.可选值为simple: 默认值,执行 ExecStart 指定的命令,启动主进程forking: 以 fork 方式从父进程创建子进程,创建后父进程会立即退出oneshot: 一次性进程,Systemd 会等当前服务退出,再继续往下执行dbus: 当前服务通过 D-Bus 启动notify: 当前服务启动完毕,会通知 Systemd,再继续往下执行idle: 若有其他任务执行完毕,当前服务才会运行
Environment: 指定环境变量ExecStart: 启动当前服务的命令ExecStartPre: 启动当前服务之前执行的命令Restart: 定义何种情况 Systemd 会自动重启当前服务.可选值为always,on-success,on-failure,on-abnormal,on-abort,on-watchdogExecReload: 重新加载当前服务时执行的命令ExecStop: 停止当前服务时执行的命令ExecStartPost: 启动当前服务之后执行的命令ExecStopPost: 停止当其服务之后执行的命令RestartSec: 自动重启当前服务间隔的秒数TimeoutSec: 定义 Systemd 停止当前服务之前等待的秒数
[Install]
Install 配置块通常在文件最后,用来定义如何启动,以及是否开机启动.它的主要字段如下
WantedBy: 它的值是一个或多个Target,当前 Unit enable 时(服务开机启动时),会在/etc/systemd/system目录及指定${target}.wants子目录下创建软链接RequiredBy: 它的值是一个或多个Target,当前 Unit enable 时(服务开机启动时),会在/etc/systemd/system目录及指定${target}.required子目录下创建软链接Alias: 当前 Unit 可用于启动的别名Also: 当前 Unit enable 时(服务开机启动时),同时激活的其他 Unit