centos7启动流程和systemd特性

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43058911/article/details/102371259

centos7的启动流程和centos6的差别,在于grub的版本不同了,但是思想都一样的用于启动,只是文件格式不同了。还有启动的第一个进程也变了。

启动流程
	POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分,负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串行并行接口、键盘等硬件情况的检测
	
	BIOS:Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自检程序等
	
	BootLoader:引导加载器,引导程序
		MBR:第一个扇区
			前446个字节		BootLoader
			中间64字节		分区表
			最后2字节		55aa结束符
		GRUB分为三个阶段
			1阶段:指向MBR前446个字节
			1.5阶段:MBR之后的扇区,让1阶段中的BootLoader能识别2阶段所在的分区上的文件系统,也就是boot分区信息
			2阶段:指向/boot/grub/,通过目录下配置文件找内核路径(grub.conf)
	kernel	
		自身初始化
			探测可识别到的所有硬件设备
			加载硬件驱动程序(借助ramdisk加载驱动)
			以只读方式挂载根文件系统
			内核初始化,centos7使用systemd代替init
	执行initrd.target所有单元,包括挂在/etc/fstab
	从initramfs根文件系统切换到磁盘根目录
	systemd执行默认target配置,配置文件/etc/systemd/system/default.target,这是一个软链接,与默认运行级别有关
	systemd执行sysinit.target初始化系统
	systemd启动multi-user.target下的本机服务器服务
	systemd执行multi-user.target下的/etc/rc.d/rc.local
	systemd执行multi-user.target下的getty.target及登录服务
	systemd执行graphical需要的服务

centos7使用的第一个进程为systemd,下面介绍systemcd特性:

systemd:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其他进程
systemd新特性:
	系统引导时实现服务并行启动
		这个就是为什么centos7比centos6启动速度快的原因。
	按需启动守护进程
		目前不需要的不启动,等用是被激活。
	自动化的服务依赖关系管理
		centos6上:A服务依赖于B服务,B服务不启动时,A服务启动不了
		centos7上:A服务依赖于B服务,但是启动A服务时,systemd会自动启动B服务
	同时采用socket和D-bus总线激活服务
		像Telnet-server这样的服务长期睡眠状态,由systemd代理监听23端口,有请求时激活Telnet服务,centos6用的是xinetd监听
	系统快照状态
unit:核心概念
	unit表示不同类型的systemd对象,通过配置文件进行标识和配置,文件中主要包含了系统服务,监听socket,保存的系统快照以及其它与init相关的配置
	配置文件:运行优先级从低到高
		/usr/lib/systemd/system/:每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/
		/run/systemd/system/:系统执行过程中所产生的服务脚本,比上面目录优先运行
		/etc/systemd/system/:管理员建立的执行脚本,类似于/etc/rcN.d/Sxx的功能,比上面目录优先运行
unit类型:
	systemctl -t help :查看unit类型
	service unit:文件扩展名为.service,用于定义系统服务
	target unit:文件扩展名为.target,用于模拟实现运行级别
	device unit:.device,用于定义内核识别的设备
	mount unit:.mount,定义文件系统挂载点
	socket unit:.socket,用于标识进程间通信用的socket文件,也可再系统启动时,延迟启动服务,实现按需启动
	snapshot unit:.snapshot,管理系统快照
	swap unit:.swap,标识swap设备
	automount unit:.automount,文件系统的自动挂载点
	path until:.path,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如:spool目录

servies unit文件格式

service unit file文件通常由三部分组成
	[Unit]:定义unit类型无关的通用选项,用于提供unit的描述信息,unit行为及依赖关系等
		unit此段的常用选项:
			description:描述信息
			after:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与before相反
			requires:依赖到其他的unit,强依赖,被依赖的units无法激活时,当unit无法启动
			wants:依赖到其他的unit。弱依赖
			conflicts:定义unit之间的冲突
			
	[Service]:与特定类型相关的专用选项,此处为service类型,比如target等,要到哪个写哪个
		service段的常用选项:
			type:定义影响execstart及相关参数的功能的unit进程启动类型
				simple:默认值,这个daemon主要由execstart接的指令串来启动,启动后常驻于内存中
				forKing:由execstart启动的程序透过spawns延伸出其他子程序来作为次daemon的主要服务,原生福程序在启动结束后就是终止
				oneshot:与sinple类似,不过这个程序在工作完毕后就结束了,不会常驻内存中
				dbus:与simple类似,但这个daemon必须要在取得一个D-bus的名称后,才会继续运作,因此通常也要同时设定busname= 才行
				notify:咋启动完成后会发送一个通知消息,还需要配合notifyaccess来让systemd接收消息
				idle:与simple类似,要执行这个daemon必须要所有的工作都顺利完成后才执行,这类的daemon通常是开机到最后才执行的服务
	[Install]:定义由"systemctl enable"以及"systemctl disable"命令在实现服务启用或禁用时用到的一些选项
		install段的常用选项:
			alias:别名。
			requiredby:被那些units所依赖,强依赖
			wantdby:被那些units所依赖,弱依赖
			also:安装本服务的时候还要安装别的相关服务
	注意:对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而後可以选择重启
		systemctl daemon-reload

nginx服务unit文件示例:

	文件内容中要要严格区分大小写
	vim /lib/systemd/system/nginx.service
		[Unit]
		Description=nginx server
		After=network.target

		[Service]
		Type=forking
		ExecStart=/usr/sbin/nginx

		[Install]
		WantedBy=multi-user.target

猜你喜欢

转载自blog.csdn.net/qq_43058911/article/details/102371259