CentOS 7下systemd管理的详解

2020-01-30 16:47:36王冬梅

CentOS系统启动流程:

POST --> Boot Sequence --> Bootloader --> kernel + initramfs(initrd) --> rootfs --> /sbin/init

innit程序:

CentOS 5:SysV init

CetnOS 6:  Upstart

CentOS 7 : Systemd

Systemd新特性:

系统Sys V init和LSB init scripts兼容

系统引导时实现服务并行启动;采用socket / D-Bus activation等技术启动服务;为了减少系统启动时间,systemd的目标是:尽可能启动更少的进程;尽可能将更多的进程并行启动;

按需激活进程;Systemd可以提供按需启动的能力,只有在某个服务被真正请求的时候才启动它。当该服务结束,systemd可以关闭它,等待下次需要时再次启动它。

能够对系统进行快照和恢复;

启动挂载点和自动挂载点的管理:

Systemd自助管理系统上的挂载点,以便能够在系统启动时自动挂载它们。且兼容/etc/fstab文件;

实现事务依赖关系管理:

systemd 维护一个"事务一致性"的概念,保证所有相关的服务都可以正常启动而不会出现互相依赖,以至于死锁的情况。

基于内生依赖关系定义服务控制逻辑;

system利用Linux内核的特性即CGroup来完成进程跟踪的任务。当停止服务时,通过查询CGroup,systemd可以确保找到所有的相关进程,从而干净地停止服务;

日志服务:systemd自带日志服务journald,该日志服务的设计初衷是克服现有的syslog服务的缺点。

System的基本概念

单元的概念:

系统初始化需要做的事情非常多。需要启动后台服务,比如启动 SSHD 服务;需要做配置工作,比如挂载文件系统。这个过程中的每一步都被 systemd 抽象为一个配置单元,即 unit。可以认为一个服务是一个配置单元;一个挂载点是一个配置单元;一个交换分区的配置是一个配置单元;等等。systemd 将配置单元归纳为以下一些不同的类型。然而,systemd 正在快速发展,新功能不断增加。所以配置单元类型可能在不久的将来继续增加。

service:代表一个后台服务进程,比如mysqld。这是常用的一类;

socket:此类配置单元封装系统和互联网中的一个套接字。当下,systemd支持流式、数据包和连续包的AF_INET、AF_INET6、AF_UNIX socket。每一个套接字配置单元都有一个相应的服务配置单元 。相应的服务在第一个"连接"进入套接字时就会启动(例如:nscd.socket 在有新连接后便启动 nscd.service)。

device :此类配置单元封装一个存在于 Linux 设备树中的设备。每一个使用 udev 规则标记的设备都将会在 systemd 中作为一个设备配置单元出现。

mount :此类配置单元封装文件系统结构层次中的一个挂载点。Systemd 将对这个挂载点进行监控和管理。比如可以在启动时自动将其挂载;可以在某些条件下自动卸载。Systemd 会将/etc/fstab 中的条目都转换为挂载点,并在开机时处理。