1. [Unit]字段详解
- Requires:依赖的其他 Unit 列表,列在其中的 Unit 模块会在这个服务启动的同时被启动,并且如果其中有任意一个服务启动失败,这个服务也会被终止。
- After:与 Requires 相似,但会在后面列出的所有模块全部启动完成以后,才会启动当前的服务。
- Wants:与 Requires 相似,但只是在被配置的这个 Unit 启动时,触发启动列出的每个 Unit 模块,而不去考虑这些模块启动是否成功。
2. target 作用
systemd target是systemd众多资源的一个分类,以.target结尾,所代表的意思是unit集合,即.target资源包含了一系列的.service、.target等,运行这个target会运行其包含的所有.service、.target等unit/服务。
其作用就是方便系统管理,根据用户设定,控制系统启动的相关target,达到控制不同service启动的目的。
target配置文件跟上面的service配置文件是一样的,只是target通常只有[Unit]区块(字段定义同上)。常见的target有multi-user.target,日常添加系统服务非特殊情况会放到这个target下。
3. target 与 unit 的关系
Target (逻辑组)
├── Unit A (服务)
├── Unit B (套接字)
└── Target C (子目标)
4. target 与 unit 依赖关系实现
[Unit]
# 当前Unit所属的Target
PartOf=graphical.target# 当前Unit要加入的Target
WantedBy=multi-user.target# 依赖的其他Target
After=network.target
5. 配置错误也不影响服务启动
Environment=-/aa/bb,就表示即使/aa/bb文件不存在也不会报错
6. system and service manager
systemd 是 Linux 系统的一套基本构建块。它提供了一个以 PID 1 运行的系统和服务管理器,并启动系统的其余部分。
systemd 提供积极的并行化能力,使用套接字和 D-Bus 激活来启动服务,提供守护进程的按需启动,使用 Linux 控制组跟踪进程,维护挂载和自动挂载点,并实现复杂的基于事务依赖的服务控制逻辑。systemd 支持 SysV 和 LSB init 脚本,可以替代 sysvinit。
其他部分包括日志守护进程、用于控制基本系统配置(如主机名、日期、语言环境)的实用程序、维护登录用户和正在运行的容器和虚拟机的列表、系统帐户、运行时目录和设置,以及用于管理简单网络配置、网络时间同步、日志转发和名称解析的守护进程。
7. 统计各个服务启动所需时间
systemd-analyze plot > boot.svg
8. 显示远程主机的某个 Unit 状态
systemctl -H remote-ip status docker
9. 显示某个 Unit 的所有底层参数
systemctl show httpd
10. 设置某个 Unit 的指定属性
systemctl set-property http CPUShares=500