systemd设计原理 systemd详解
转载
- 由来
- Linux 的启动一直采用init进程,这种方法有两个缺点。一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程,二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长,Systemd 这个名字的含义,就是它要守护整个系统。Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单元,服务)
- 支持并行化任务
- 同时采用socket式与D-Bus总线式激活服务;
- 按需启动守护进程(daemon);
- 利用 Linux 的 cgroups 监视进程;
- 支持快照和系统恢复;
- 维护挂载点和自动挂载点;
- 各服务间基于依赖关系进行精密控制
- 所有可用的单元文件存放在 /usr/lib/systemd/system/ 和 /etc/systemd/system/ 目录(后者优先级更高
- systemd用法
- systemctl是 Systemd 的主命令,用于管理系统,查看 Systemd 的版本
- 用于查看启动耗时
- 查看每个服务的启动耗时
-
- 显示瀑布状的启动过程流
- 显示指定服务的启动流
- Unit 的配置文件
- 每一个 Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit 。Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。systemctl enable命令用于在上面两个目录之间,建立符号链接关系,systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。真正的文件时箭头后面
- 配置文件的区块unit
[Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系
[Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动
[Service]区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块
- target
- Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit
(1)默认的 RunLevel(在/etc/inittab文件设置)现在被默认的 Target 取代,位置是/etc/systemd/system/default.target,通常符号链接到graphical.target(图形界面)或者multi-user.target(多用户命令行)。
(2)启动脚本的位置,以前是/etc/init.d目录,符号链接到不同的 RunLevel 目录 (比如/etc/rc3.d、/etc/rc5.d等),现在则存放在/lib/systemd/system和/etc/systemd/system目录。
(3)配置文件的位置,以前init进程的配置文件是/etc/inittab,各种服务的配置文件存放在/etc/sysconfig目录。现在的配置文件主要存放在/lib/systemd目录,在/etc/systemd目录里面的修改可以覆盖原始设置。
- 日志管理
- Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是/etc/systemd/journald.conf
- 如何制作系统启动服务
-
- 文件详解
[Unit]
Description:描述信息
After:表明需要依赖的服务,作用决定启动顺序
Before:表明被依赖的服务
Requles:依赖到的其他unit ,强依赖,即依赖的unit启动失败。该unit不启动。
Wants:依赖到的其他unit,弱依赖,即依赖的unit 启动失败。该unit继续启动
Conflicts:定义冲突关系
[Service]:
Type:启动时关系的定义,
simple:exec启动的进程就是主进程。
forking :exec 启动的进程生成的其中一个子进程成为主进程,启动完成后,旧的主进程会退出。
ontshot:启动下一个进程前主进程退出。
PIDFile=/var/run/sshd.pid
EnvironmentFile 需要使用到的变量的定义文件
ExecStart= 启动 unit需要执行的命令
ExecStartpre:
ExecStartpost:
ExecStop=停止unit需要执行的命令
Restart:
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[install]:服务启动或禁用时的一些选项
Alias:
RequlredBy: 被那些unit所依赖,
WantedBy:被那些unit所依赖
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。