systemd简介与特点

TrumanWong
8/7/2023
TrumanWong

systemd简介

systemd是一个系统和服务管理器,它的主进程的默认进程ID是1。systemd 主进程是系统所有进程的起点。Linux系统在完成内核引导以后就开始运行systemd程序。systemd的主要功能包括:

systemd特点

按需启动

System V系统中,系统服务被赋予了不同的优先级。系统启动时,System V的主进程init会按优先级依次启动服务,即按优先级排序,优先级高的先启动,启动完成后再启动优先级较低的服务。System V的启动过程类似于串行队列处理系统,排在队伍前面的先启动,前面的启动完成再启动后面的服务。这样做的好处是能解决服务之间的依赖性问题,例如需要使用网络的服务必须等待网络启动后才能启动。坏处是服务总是排队处理,效率太低。

System V的另一个问题是,启动系统时会将可能用到的所有服务都启动。有些服务可能从未使用过,例如打印服务CUPS、蓝牙服务Bluetooth等,这些服务虽未被使用过,但却一直运行在系统中消耗着系统资源。

为了解决这些问题,systemd采取了两项技术:

采用Linux的Cgroup特性跟踪和管理进程的生命周期

System Vinit进程不仅需要启动服务,还要能跟踪和管理服务进程的生命周期,这项工作非常有难度。服务进程通常在后台运行,有时服务进程会多次派生,其难度在于要准确获得派生进程的PID才能完整关闭服务。

CgroupLinux内核的特性,主要用来实现系统资源配额管理。当进程创建子进程时,子进程会自动继承父进程的Cgroup。因此无论进程如何派生子进程,它们的Cgroup都是一样的。systemd正是利用了Linux内核的Cgroup特性来跟踪进程的,当服务停止后,systemd只需要遍历查询指定的Cgroup,就可以找到所有子进程,然后一一结束即可。

日志服务

systemd还针对性地重新设计了系统的日志服务journald,其主要是针对正在使用的syslog的一些缺点。syslog的缺点主要存在两方面:其一是日志不安全,进程在产生日志消息时,消息的内容均由进程自主产生,任何进程都可以互相冒充,因为syslog并不会验证消息的来源是否属实;其二是日志消息没有严格的格式,这使得自动化处理日志变得困难、低效。

journald进行了重新设计,不再使用文本格式存放日志,而使用二进制文件存放日志;同时还有可移植性高、资源消耗少、结构简单、可扩展、安全性高等优点。

单元类型

systemd配置文件被称为单元,根据类型不同,以不同的扩展名结尾。系统初始化需要做的事情非常多,需要启动后台服务,比如启动sshd服务;需要做配置工作,比如挂载文件系统。这个过程中的每一步都被systemd抽象为一个配置单元,即单元unit。可以认为一个服务是一个配置单元;一个挂载点是一个配置单元;一个交换分区的配置是一个配置单元。systemd将配置单元归纳为一些不同的类型。

systemd中,服务、设备、挂载等资源统一被称为单元,所以systemd中有许多单元类型。服务单元文件的扩展名是.service,同Shell脚本的功能相似。

systemd单元文件放置位置有以下路径:

常见的单元类型及作用如下:

查看所有可用的单元类型
# systemctl -t help