现在的位置:首页  /  云计算培训 >云计算技术教程

systemd方式 下系统的启动特点

来源: 薪享宏福
发布时间: 2019年03月20日
分享到:
为了进一步提升系统启动的速度,以及方便对服务器进行管理,CentOS 7采用了更先进的systemd来替代sysVinit和Upstart ,而且管理命令和启动脚本的编写与sysVinit还可以兼容,降低了运维工程师的学习成本,所以之前在CentOS 5、CentOS 6上可以正常运行的服务启动脚本能够无缝迁移到CentOS 7上运行。

那么systemd有哪些新的特性呢?其最大的特点就是可以真正地并行启动了。这种并行启动的方式和Upstart不同,不需要用户来解决依赖关系,例如:在系统启动的过程中,都会有依赖关系的问题,像是Apache、Nginx这类的服务在启动之前要判断端口是否被占用,这就需要获得连接到网络接口的IP地址,如果网络服务没有启动,就会导致依赖它的服务启动失败。在真正的启动过程中,会出现更复杂的依赖,即多层依赖,如A服务依赖B,B服务依赖C ,以至于更多的依赖关系, Upstart启动的过程就会要求服务必须按照C→B→A的启动顺序才能正确运行。那么,一旦C服务启动缓慢就会导致B和A这两个服务进入等待状态,从而导致系统启动缓慢。而systemd可以让A、B、C三个服务并行启动起来,而且还可以支持按需启动。
 
那么,什么是按需启动呢?按需启动是指服务在没有被其他服务依赖时,是不会随着系统启动一起被加载的,这样就可以大大缩短启动的时间。这么"神奇”的功能是怎么实现的呢?首先要解决的就是依赖关系, systemd作者总结出了三种服务依赖关系:
 
1、端口依赖,即服务A若正常启动,则需要先连接服务B的端口。解决这种依赖需要systemd先“制作” 一个端口,当程序A启动时, systemd检测到对该端口的socket请求,然后检测B服务是否启动了,如果没有启动则对A服务的请求进行缓存,直到程序B运行为止,这样就解决了端口依赖的问题。而且还很体贴地为用户提供了通过systemd拉起B服务的功能,进一步减少用户的工作量。

2、程序通信的依赖, systemd采用了D-Bus作为程序之间的通信工具,在启动过程中,一旦被依赖的服务程序没有运行,同样会将请求进行缓存直到被依赖的程序运行为止。

3、文件系统依赖,除了"/”目录必须串行启动之外,其他被程序依赖的目录都可以采用和autofs相同的触发机制,即先创建临时挂载点(一个空目录),一旦有服务程序使用到这个挂载点则触发挂载的系统调用,将真正的目录挂载到事先定义好的挂载点,这就是systemd能进行并行启动的原因。有了这三种解决依赖关系的方法之后,可以将启动过程中产生的依赖关系先缓存到内存中,然后继续启动下一个服务; systemd就是这样让系统启动过程并行运行起来的,最后通过多CPU核心来并行处理,从而缩短了启动的时间。接下来我们来具体分析各种启动方式在
 
系统底层都做了哪些工作。

Upstart是一个基于事件的init守护进程的替代工具 ,用于在系统启动时进行程序的管理。由Canonical公司的前雇员Scott JamesRemnant开发,最初用于Ubuntu发行版。

相关推荐:

sysVinit方式下系统的启动特点

sysVinit的正常启动顺序详细解析教程

运维培训班的学员要明白开发同样重要

PHP运维常见问题以及解决办法