Linux系统init程序之systemd(1):基本概念

前言

systemd是现代Linux系统广泛采用的系统配置和服务管理程序,通常作为init进程(PID=1)运行,并执行系统的初始化任务。系统中大部分的服务程序都由systemd在系统启动过程中按照特定的顺序和依赖拉起,并且systemd提供了一系列工具如systemctl、journalctl等来对系统中的各种服务进行配置和管理。

在这里插入图片描述

Unit(单元)

为了管理系统的各种资源,systemd将各种系统启动及运行相关的对象,如系统服务、网络配置、设备挂载以及定时任务等,统一抽象程各种不同类型的unit,并且对于不同unit间允许配置依赖关系。在系统启动过程中,systemd会尝试并行启动所有配置的unit,对于配置了依赖关系的unit,systemd保证它们的启动顺序。
单元通常以配置文件的形式存放在系统特定的目录下,不同类型单元的配置文件其文件扩展名也不相同。以centos 8系统为例,查看系统目录下的单元文件:
在这里插入图片描述

单元类型

systemd共支持12种单元类型,对于不同的Unit类型,其表示的意义如下表所示:

单元类型作用
service单元用于定义系统服务,如各种后台服务进程
target单元用于将多个单元在逻辑上组合在一起,可模拟实现“运行级别”
device单元用于封装一个设备文件,可用于基于设备的启动。
mount单元用于封装一个文件系统挂载点
automount单元用于封装一个文件系统自动挂载点,即访问时进行挂载
swap单元用于封装一个交换分区或交换文件
path单元用于根据文件系统上特定对象的变化来启动其它服务
socet单元用于封装一个套接字(UNIX/INET)或者管道(FIFO)
timer单元用于封装一个基于时间触发的动作。它取代了传统的atd, crond等任务计划服务
slice单元用于控制特定CGroup内(例如一组service与scope单元)所有进程的总体资源占用
scope单元与service单元类似,但是由systemd根据D-bus接口接收到的信息自动创建,可用于管理外部创建的进程

单元存放目录

systemd将所有unit文件放置在指定的系统目录当中,并且对于不同的目录具有不同的优先级,按照优先级高低的顺序排列如下:

  • /etc/systemd/system:系统或用户自定义的配置文件
  • /run/systemd/system:软件运行时生成的配置文件
  • /usr/lib/systemd/system:系统或第三方软件安装时添加的配置文件

systemd默认从/etc/system/system目录下读取unit配置文件,但实际上该目录下存放的基本是软链接,真正的unit配置文件存放在/usr/lib/system/system目录下。

Target(目标)

target是unit的一种,封装了一个由 systemd 管理的启动目标, 用于在启动过程中将一组单元汇聚到一个众所周知的同步点,便于系统启动阶段的控制。

默认启动目标

系统启动时,默认使用目标default.target,通常情况下是链接到multi-user.target(对于支持图形的系统,则是graphical.target。使用systemctl工具可以查看当前的默认启动目标:

Aspiresky ~ # systemctl get-default
graphical.target

systemd支持更改当前默认启动目标:

Aspiresky ~ # systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /lib/systemd/system/multi-user.target.

默认目标顺序

systemd使用下面的顺序来确定要启动的default.target

  1. 通过内核参数systemd.unit=指定
  2. 使用/etc/systemd/system/default.target软链接指向的目标
  3. 使用/usr/lib/systemd/system/default.target软链接指向的目标

“SysV 运行级别” 与 “systemd 目标” 对照表

sysvinit机制提供了运行级别,但是在systemd中已经去除了这样的概念。为了与sysvinit兼容,systemd可以使用target来模拟“运行级别”,并支持使用旧有的telinit命令进行切换。

SysV运行级别Systemd目标注释
0runlevel0.target, poweroff.target中断系统(halt)
1, s, singlerunlevel1.target, rescue.target单用户模式
2, 4runlevel2.target, runlevel4.target, multi-user.target用户自定义运行级别,通常识别为级别3
3runlevel3.target, multi-user.target多用户,无图形界面。用户可以通过终端或网络登录
5runlevel5.target, graphical.target多用户,图形界面。继承级别3的服务,并启动图形界面服务
6runlevel6.target, ****reboot.target重启
emergencyemergency.target紧急模式(Emergency shell)

内核引导选项

当作为init进程运行时,systemd可以支持内核引导选项用以定制化systemd的行为,一些常用的引导选项如下:

  • system.unit=, rd.systemd.unit=:设置系统默认启动的目标,缺省配置为default.target。这里带有"rd."前缀的选项用于"initramfs"环境,无前缀的选项则用于常规环境
  • systemd.dump_core:该选项用于指示systemd在崩溃时,进行内存转储
  • systemd.crash_shell:该选项用于指示systemd在崩溃后启动一个shell
  • quiet:关闭启动过程中的状态输出。注意,内核支持相同的选项,并用于禁止内核的调试输出
  • debug:开启启动过程中的调试输出。注意,内核支持相同的选项,并用于开启内核的调试输出

相关参考

  • 《Arch Linux WIKI》
  • 《systemd - Linux man pages》
posted @ 2020-07-01 00:13  Aspiresky  阅读(61)  评论(0编辑  收藏  举报