系统启动过程中,当内核启动完成,后加载根文件系统,后就绪的一些用户空间的服务的管理工作,就交由init进行启动和管理,在CentOS6之前的init的管理方式都类似,相关的内容我们在之前的文章中也做出过介绍。在CentOS7上,init变成了systemd,其管理方式也发生了重大的变化,本章就跟大家欧一起探讨一些关于CentOS7上的systemd的新特性的内容。具体分为一下几个方面:
1、systemd新特性简介
2、systemd如何管理系统系统上的各服务
3、systemd管理各个服务时,所依赖的unit文件的组织格式
4、systemd相关操作的实际效果展示
第一章 systemd新特性简介 1、init程序的功能介绍init程序是当系统内核启动后,加载完根文件系统,然后就由内核加载了init程序,并将后续用户空间其他程序的启动和管理工作交由init程序进行管理,除非有需要进行内核特权级别操作时,内核才会被用户空间的各个系统调用,完成一些内核级别的操作
在CentOS5、6上,init初始化用户空间的启动流程为:/sbin/init程序主要是通过读取/etc/inittab文件来完成一定的任务,完成的任务有:
定义默认运行级别(/etc/inittab)
运行系统初始化脚本(/etc/rc.d/rc.sysinit)完成系统初始化
关闭指定运行级别下的各服务,启动指定级别下需要开启的各服务
启动mingetty虚拟终端,调用login程序,显示登录提示符,让终端进行登录
init程序的类型:
centos5:SysV init
其配置文件:/etc/inittab
centos6: Upstart
其配置文件:/etc/inittab和/etc/init/*.conf
centos7:Systemd
其配置文件:/usr/lib/systemd/system/、/etc/systemd/system/
2、systemd的新特性:<1>系统引导时实现服务并行启动(前提是并行启动的服务之间没有依赖关系)
<2>按需激活进程(进程在没有访问时是不会被启动的,但是服务仍然处于半活动状态,只是服务没有启动)
<3>系统状态快照,自我保存某一时刻进程用户空间状态的快照,可以回滚到某一个时刻
<4>基于依赖关系定义的服务控制逻辑
浅析 Linux 初始化 init 系统,第 3 部分: Systemd
3、systemd的关键特性:<1>基于socket的激活机制:socket与程序分离,可以在系统启动时,先把某个服务的socket分配给该服务,但该服务可以事先不用启动
<2>基于bus的激活机制:基于总线的激活
<3>基于device的激活机制:当某个设备接入时,systemd可以自动的去激活诸如device unit、mount unit、automount unit对设备进行识别和挂载等
<4>基于path的激活机制:系统可以自动监控某个目录存不存在,文件存不存在,并根据此判断,来激活别的服务、进程等
<5>系统快照:能够保存各unit的当前状态信息于持久存储设备中;从而实现了回滚机制
<6>能向后兼容sysv init脚本:在centos5、6系统上/etc/init.d/目录下的服务脚本,systemd也能够对其进行管理
不兼容的地方:
1):systemctl的命令是固定不变的,也就是说像在centos6上的各类服务脚本的start、stop这类我们可以通过修改服务脚本,去实现service 命令使用的时候后面的参数的变化。但是systemctl控制的时候,则无法通过修改服务脚本去实现systemctl后面参数的变化
2):不是由systemd启动的服务,systemctl无法与之通信,也就是无法对其进行控制。在centos6上,利用服务脚本自身启动时,利用service依然能够对其进行管理,但是centos7上,如果服务脚本自身启动,而不是通过systemctl进行启动,则systemctl就无法对服务做出管理
4、systemd的核心概念:unitunit由其相关的配置文件进行标识、识别和配置,也就是说一个unit到底定义与否,由其配置文件进行标识。这类配置文件中主要包含了几个类别:系统服务,监听的socket、保存的快照以及其他与init相关的信息,这些配置文件中主要保存在:
/usr/lib/systemd/system/ 每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/
/run/systemd/system/ 系统执行过程中所产生的服务脚本,比上面目录优先运行
/etc/systemd/system/ 管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx类的功能,比上面目录优先运行
unit的常见类型:
service unit:这类unit的文件扩展名为.service,主要用于定义系统服务(其扮演了在centos6上/etc/init.d/目录下的服务脚本的作用)
target unit:这类unit的文件扩展名为.target,主要用于模拟实现"运行级别"的概念
device unit:这类unit文件扩展名为.device,用于定义内核识别的设备,然后udev利用systemd识别的硬件,完成创建设备文件名
mount unit:这类unit文件扩展名为.mount,主要用于定义文件系统挂载点
socket unit:这类unit文件扩展名为.socket,用于标识进程间通信用到的socket文件
snapshot unit:这类unit文件扩展名为.snapshot,主要用于实现管理系统快照
swap unit:这类unit文件扩展名为.swap,主要用于标识管理swap设备
automount unit:这类unit文件扩展名为.automount,主要用于文件系统自动挂载设备